Programming/JavaScript

javaScript 날자 형식체크

Edward. K 2020. 12. 31. 12:03
반응형

- 입력형식 : YYYYMMDD , YYYY/MM/DD , YYYY-MM-DD
- 결과 : 0(날자형식), 1(날자형식 아님)

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <title>JS Data Chaek</title>
 </head>
 <body>
  <script type="text/javascript">
  <!--
    var yyyymmdd = '20201231';
    alert('yyyymmdd : '+yyyymmdd +  '   >  isDate = ' +isDate(yyyymmdd)       );

    yyyymmdd = '2020-12-31';
    alert('yyyymmdd : '+yyyymmdd +  '   >  isDate = ' +isDate(yyyymmdd)       );

    yyyymmdd = '2020/12/31'; 
    alert('yyyymmdd : '+yyyymmdd +  '   >  isDate = ' +isDate(yyyymmdd)       );
     
    yyyymmdd = '00201231';
    alert('yyyymmdd : '+yyyymmdd +  '   >  isDate = ' +isDate(yyyymmdd)       );

    yyyymmdd = '20201331';
    alert('yyyymmdd : '+yyyymmdd +  '   >  isDate = ' +isDate(yyyymmdd)       );

    yyyymmdd = '20201232';
    alert('yyyymmdd : '+yyyymmdd +  '   >  isDate = ' +isDate(yyyymmdd)       );

     /*
      * 날자 입력 제한 형식  " YYYYMMDD, YYYY-MM-DD, YYYY/MM/DD 
      *  return  > 0: 정상, 1: 날자형식 아님.
      */
    function isDate(yyyymmdd) {

        var yy, mm, dd, splitStr = '-';

        // 8자리로 입력된 경우, 
        if (yyyymmdd.length == 8) 
        {
            if (!yyyymmdd.match(/[0-9]{8}/g)) 
            {
                alert('is not date');
                return 1;    // 입력값 오류
            }
            yy = yyyymmdd.substring(0, 4);
            mm = yyyymmdd.substring(4, 6);
            dd = yyyymmdd.substring(6, 8);
        } 
        // 10자리 입력
        else if (yyyymmdd.length == 10) 
        {
            if (!yyyymmdd.match(/[0-9]{4}[-/][0-9]{2}[-/][0-9]{2}/g))
            {
                alert('is not date');
                return 1;    // 입력값 오류
            }

            if(yyyymmdd.indexOf('/')>0)  splitStr = '/';

            yy = yyyymmdd.split(splitStr)[0];
            mm = yyyymmdd.split(splitStr)[1];
            dd = yyyymmdd.split(splitStr)[2];
        }
        // 그외 .  입력형식 에러   YYYYMMDD, YYYY-MM-DD, YYYY/MM/DD  형태만가능 
        else
        {
            return 1;
        }
        
        // 1000년 이하인 경우 에러처리  
        if(eval(yy)<1000)
        {
            alert('is not year');
            return 1;    // 입력값 오류
        }

        // 해당월이 1보다 작거나 12보다 큰 겨우.
        if (eval(mm) < 1 || eval(mm) > 12)
        {
            alert('is not month');
            return 1;
        }

        // 해당월의 마지막 날자 
        var limit_day;
        switch (eval(mm))
        {
            case 2:
                if ((yy - 2008) % 4 == 0) limit_day = 29;
                else limit_day = 28;
                break;
            case 4:        case 6:        case 9:        case 11:
                limit_day = 30;
                break;
            default:  // 1 ,3, 5, 7, 8, 10, 12
                limit_day = 31;
                break;
        }
        // 해당월의 날자 초과  하거나, 해당일의 수가 1보다 작은 경우
        if (eval(dd) > limit_day || eval(dd) < 1)
        {
            alert('is not day');
            return 1;
        }
        return 0;
    } 
  //-->
  </script>
 </body>
</html>
반응형