JavaScript에서 "mm / dd / yyyy"형식으로 날짜를 확인하는 방법은 무엇입니까?


106

형식 을 사용하여 입력 에서 날짜 형식의 유효성을 검사하고 싶습니다 mm/dd/yyyy.

한 사이트에서 아래 코드를 찾은 다음 사용했지만 작동하지 않습니다.

function isDate(ExpiryDate) { 
    var objDate,  // date object initialized from the ExpiryDate string 
        mSeconds, // ExpiryDate in milliseconds 
        day,      // day 
        month,    // month 
        year;     // year 
    // date length should be 10 characters (no more no less) 
    if (ExpiryDate.length !== 10) { 
        return false; 
    } 
    // third and sixth character should be '/' 
    if (ExpiryDate.substring(2, 3) !== '/' || ExpiryDate.substring(5, 6) !== '/') { 
        return false; 
    } 
    // extract month, day and year from the ExpiryDate (expected format is mm/dd/yyyy) 
    // subtraction will cast variables to integer implicitly (needed 
    // for !== comparing) 
    month = ExpiryDate.substring(0, 2) - 1; // because months in JS start from 0 
    day = ExpiryDate.substring(3, 5) - 0; 
    year = ExpiryDate.substring(6, 10) - 0; 
    // test year range 
    if (year < 1000 || year > 3000) { 
        return false; 
    } 
    // convert ExpiryDate to milliseconds 
    mSeconds = (new Date(year, month, day)).getTime(); 
    // initialize Date() object from calculated milliseconds 
    objDate = new Date(); 
    objDate.setTime(mSeconds); 
    // compare input date and parts from Date() object 
    // if difference exists then date isn't valid 
    if (objDate.getFullYear() !== year || 
        objDate.getMonth() !== month || 
        objDate.getDate() !== day) { 
        return false; 
    } 
    // otherwise return true 
    return true; 
}

function checkDate(){ 
    // define date string to test 
    var ExpiryDate = document.getElementById(' ExpiryDate').value; 
    // check date and print message 
    if (isDate(ExpiryDate)) { 
        alert('OK'); 
    } 
    else { 
        alert('Invalid date format!'); 
    } 
}

무엇이 잘못 될 수 있는지에 대한 제안이 있습니까?


3
StackOverflow에 오신 것을 환영합니다. {}툴바 버튼 으로 소스 코드의 형식을 지정할 수 있습니다 . 이번에는 당신을 위해 해왔습니다. 또한 문제에 대한 몇 가지 정보를 제공하십시오. 작동하지 않는 설명은 해결 방법 으로 유용 합니다.
Álvaro González

어떤 종류의 날짜 형식을 확인하려고합니까? 유효해야하는 날짜의 예를 들어 줄 수 있습니까?
Niklas


답변:


187

Niklas가 귀하의 문제에 대한 올바른 답을 가지고 있다고 생각합니다. 그 외에도 다음 날짜 유효성 검사 기능이 조금 더 읽기 쉽다고 생각합니다.

// Validates that the input string is a valid date formatted as "mm/dd/yyyy"
function isValidDate(dateString)
{
    // First check for the pattern
    if(!/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(dateString))
        return false;

    // Parse the date parts to integers
    var parts = dateString.split("/");
    var day = parseInt(parts[1], 10);
    var month = parseInt(parts[0], 10);
    var year = parseInt(parts[2], 10);

    // Check the ranges of month and year
    if(year < 1000 || year > 3000 || month == 0 || month > 12)
        return false;

    var monthLength = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];

    // Adjust for leap years
    if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
        monthLength[1] = 29;

    // Check the range of the day
    return day > 0 && day <= monthLength[month - 1];
};

9
parseInt :에 두 번째 인수를 사용해야합니다 parseInt(parts[0], 10). 그렇지 않으면 9 월 09은 8 진수로 읽히고 0으로 구문 분석됩니다
hugomg

1
몇 년이 지났고 이것은 달콤한 대답에 감사드립니다!
PsychoMantis 2013 년

1
훌륭한 포스트! 정규식 형식을 유효성 검사에 필요한 구문 분석과 결합합니다.
James Drinkard 2013

4
정규식을 다음과 같이 변경하는 것이 좋습니다. / ^ (\ d {2} | \ d {1}) \ / (\ d {2} | \ d {1}) \ / \ d {4} $ / this 2014 년 1 월 5 일 한 자리의 월과 일을 잡는 방식입니다. 샘플 주셔서 감사합니다!
Mitch Labrador

1
이것은 가장 간결하고 효율적이며 우아한 대답입니다. 이것이 허용되어야합니다
Zorgatone

121

날짜 유효성 검사를 위해 Moment.js 를 사용 합니다.

alert(moment("05/22/2012", 'MM/DD/YYYY',true).isValid()); //true

Jsfiddle : http://jsfiddle.net/q8y9nbu5/

true값은 @Andrey Prokhorov에 대한 엄격한 구문 분석 크레딧입니다.

Moment가 엄격한 구문 분석을 사용하도록 마지막 인수에 부울을 지정할 수 있습니다. 엄격한 구문 분석을 수행하려면 구분 기호를 포함하여 형식과 입력이 정확히 일치해야합니다.


22
+1 제출 된 모든 사람들 중 유일하게 매우 정확한 답으로 이것을 두 번째로 두어야합니다! 당신은 스스로 날짜를 파싱하는 것만 큼 복잡한 것을하고 싶지 않습니다!
Theodore R. Smith

5
월 및 일에 1-2 자리를 허용하려면 "M / D / YYYY"를 사용하십시오.
James in Indy

3
세 번째 매개 변수 "true"가 "엄격한 구문 분석 사용"을 위해 유지된다는 점을 알아두면 좋습니다. momentjs.com/docs/#/parsing/string-format
Andrey Prokhorov

@Razan Paul은 더 명확하게 설명하기 위해 약간의 설명을 추가해도 상관 없기를 바랍니다. 바퀴를 몇 번이고 재발 명하지 않는 것이 현명합니다. 그래서 pual의 대답은 내 겸손한 의견으로는 최고의 대답입니다
Kick Buttowski

moment (dateString, 'MM / DD / YYYY', true) .isValid () || moment (dateString, 'M / DD / YYYY', true) .isValid () || moment (dateString, 'MM / D / YYYY', true) .isValid ();
Yoav Schniederman

43

다음 정규식을 사용하여 유효성을 검사하십시오.

var date_regex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/;
if (!(date_regex.test(testDate))) {
    return false;
}

이것은 MM / dd / yyyy에 저에게 효과적입니다.


3
yyyy-mm-dd 또는 9834-66-43
Sandeep Singh

7
/ ^ [0-9] {4}-(0 [1-9] | 1 [0-2])-(0 [1-9] | [1-2] [0-9] | 3을 사용할 수 있습니다. [0-1]) $ /-yyyy-mm-dd를 확인합니다.
Ravi Kant

2
나는 정규식을 공식화하는 것을 싫어하고 효율성을 좋아하는 두 가지를 싫어하기 때문에 이것은 굉장합니다!
jadrake

5
3000 년에는 어떻게 되나요? :)
TheOne 2015 년

4
TheOne..y3k 문제 @ .. : P
Sathesh

29

모든 크레딧은 elian-ebbing으로 이동합니다.

여기서 게으른 사람들을 위해 yyyy-mm-dd 형식에 대한 사용자 정의 버전의 함수도 제공합니다 .

function isValidDate(dateString)
{
    // First check for the pattern
    var regex_date = /^\d{4}\-\d{1,2}\-\d{1,2}$/;

    if(!regex_date.test(dateString))
    {
        return false;
    }

    // Parse the date parts to integers
    var parts   = dateString.split("-");
    var day     = parseInt(parts[2], 10);
    var month   = parseInt(parts[1], 10);
    var year    = parseInt(parts[0], 10);

    // Check the ranges of month and year
    if(year < 1000 || year > 3000 || month == 0 || month > 12)
    {
        return false;
    }

    var monthLength = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];

    // Adjust for leap years
    if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
    {
        monthLength[1] = 29;
    }

    // Check the range of the day
    return day > 0 && day <= monthLength[month - 1];
}

이렇게하면 '2020-5-1'이 참으로 확인되고 선행 0은 무시됩니다. 내가 처음으로 올해의 패턴을 테스트하여 작동하게 /^(19|20)\d\d$/와 달 /^(0[0-9]|1[0-2])$/과 함께 하루를 /^(0[1-9]|[12][0-9]|3[01])$/구문 분석하기 전에. 그런 다음 감사했습니다.
Hmerman6006

또한 정확히 yyyy-mm-dd 형식에 대한 날짜 패턴을 테스트하기 위해이 정규식 /^\d{4}\-\d{1,2}\-\d{1,2}$/은 yyyy-mm-dd 또는 yyyy-md를 true로 확인하므로 각 개별 날짜 부분이 아닌 길이 만 확인합니다. 년, 월 및 날짜가 올바른지 확인하지 않고 yyyy-mm-dd의 정확한 길이를 /^\d{4}\-\d{2}\-\d{2}$/대신 사용하십시오 .
Hmerman6006

17

당신은 사용할 수 있습니다 Date.parse()

MDN 문서 에서 읽을 수 있습니다.

Date.parse () 메서드는 날짜의 문자열 표현을 구문 분석하고 1970 년 1 월 1 일, 00:00:00 UTC 또는 NaN 이후의 밀리 초 수를 반환합니다 (문자열이 인식되지 않거나 경우에 따라 잘못된 날짜 값 포함). (예 : 2015-02-31).

그리고 Date.parseisNaN 의 결과가

let isValidDate = Date.parse('01/29/1980');

if (isNaN(isValidDate)) {
  // when is not valid date logic

  return false;
}

// when is valid date logic

Date.parseMDN 에서 사용하는 것이 언제 권장되는지 살펴보십시오.


1
Date.parse는 "46/7/17"과 같은 날짜로 유효한 구문 분석을 제공합니다
LarryBud

yyyy / 02 / 30에 대한 실제 결과를 반환합니다
Raimonds

11

mm / dd / yyyy 형식 날짜에 대해 잘 작동하는 것 같습니다. 예 :

http://jsfiddle.net/niklasvh/xfrLm/

귀하의 코드에 대한 유일한 문제는 다음과 같은 사실입니다.

var ExpiryDate = document.getElementById(' ExpiryDate').value;

요소 ID 앞에 괄호 안에 공백이 있습니다. 다음과 같이 변경했습니다.

var ExpiryDate = document.getElementById('ExpiryDate').value;

작동하지 않는 데이터 유형에 대한 자세한 내용이 없으면 입력 할 내용이 많지 않습니다.


9

이 함수는 주어진 문자열이 올바른 형식 ( 'MM / DD / YYYY')이면 true를 반환하고 그렇지 않으면 false를 반환합니다. (이 코드를 온라인에서 발견하고 약간 수정했습니다)

function isValidDate(date) {
    var temp = date.split('/');
    var d = new Date(temp[2] + '/' + temp[0] + '/' + temp[1]);
    return (d && (d.getMonth() + 1) == temp[0] && d.getDate() == Number(temp[1]) && d.getFullYear() == Number(temp[2]));
}

console.log(isValidDate('02/28/2015'));
            


4

다음은 유효한 날짜를 확인하는 스 니펫입니다.

function validateDate(dateStr) {
   const regExp = /^(\d\d?)\/(\d\d?)\/(\d{4})$/;
   let matches = dateStr.match(regExp);
   let isValid = matches;
   let maxDate = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
   
   if (matches) {
     const month = parseInt(matches[1]);
     const date = parseInt(matches[2]);
     const year = parseInt(matches[3]);
     
     isValid = month <= 12 && month > 0;
     isValid &= date <= maxDate[month] && date > 0;
     
     const leapYear = (year % 400 == 0)
        || (year % 4 == 0 && year % 100 != 0);
     isValid &= month != 2 || leapYear || date <= 28; 
   }
   
   return isValid
}

console.log(['1/1/2017', '01/1/2017', '1/01/2017', '01/01/2017', '13/12/2017', '13/13/2017', '12/35/2017'].map(validateDate));


3

확인 dd / MM / yyyy 확인하려면 괜찮습니다.

function isValidDate(date) {
    var temp = date.split('/');
    var d = new Date(temp[1] + '/' + temp[0] + '/' + temp[2]);
     return (d && (d.getMonth() + 1) == temp[1] && d.getDate() == Number(temp[0]) && d.getFullYear() == Number(temp[2]));
}

alert(isValidDate('29/02/2015')); // it not exist ---> false
            


2

시작 / 시작 및 종료 / 종료 날짜의 유효성을 검사하기 위해 제공된 형식에 대해 날짜 유효성 검사를 수행 할 수있는 아래 코드를 찾습니다. 더 나은 접근 방식이있을 수 있지만 이것을 생각해 냈습니다. 제공된 날짜 형식과 날짜 문자열이 함께 사용됩니다.

<script type="text/javascript">
    function validate() {

        var format = 'yyyy-MM-dd';

        if(isAfterCurrentDate(document.getElementById('start').value, format)) {
            alert('Date is after the current date.');
        } else {
            alert('Date is not after the current date.');
        }
        if(isBeforeCurrentDate(document.getElementById('start').value, format)) {
            alert('Date is before current date.');
        } else {
            alert('Date is not before current date.');
        }
        if(isCurrentDate(document.getElementById('start').value, format)) {
            alert('Date is current date.');
        } else {
            alert('Date is not a current date.');
        }
        if (isBefore(document.getElementById('start').value, document.getElementById('end').value, format)) {
            alert('Start/Effective Date cannot be greater than End/Expiration Date');
        } else {
            alert('Valid dates...');
        }
        if (isAfter(document.getElementById('start').value, document.getElementById('end').value, format)) {
            alert('End/Expiration Date cannot be less than Start/Effective Date');
        } else {
            alert('Valid dates...');
        }
        if (isEquals(document.getElementById('start').value, document.getElementById('end').value, format)) {
            alert('Dates are equals...');
        } else {
            alert('Dates are not equals...');
        }
        if (isDate(document.getElementById('start').value, format)) {
            alert('Is valid date...');
        } else {
            alert('Is invalid date...');
        }
    }

    /**
     * This method gets the year index from the supplied format
     */
    function getYearIndex(format) {

        var tokens = splitDateFormat(format);

        if (tokens[0] === 'YYYY'
                || tokens[0] === 'yyyy') {
            return 0;
        } else if (tokens[1]=== 'YYYY'
                || tokens[1] === 'yyyy') {
            return 1;
        } else if (tokens[2] === 'YYYY'
                || tokens[2] === 'yyyy') {
            return 2;
        }
        // Returning the default value as -1
        return -1;
    }

    /**
     * This method returns the year string located at the supplied index
     */
    function getYear(date, index) {

        var tokens = splitDateFormat(date);
        return tokens[index];
    }

    /**
     * This method gets the month index from the supplied format
     */
    function getMonthIndex(format) {

        var tokens = splitDateFormat(format);

        if (tokens[0] === 'MM'
                || tokens[0] === 'mm') {
            return 0;
        } else if (tokens[1] === 'MM'
                || tokens[1] === 'mm') {
            return 1;
        } else if (tokens[2] === 'MM'
                || tokens[2] === 'mm') {
            return 2;
        }
        // Returning the default value as -1
        return -1;
    }

    /**
     * This method returns the month string located at the supplied index
     */
    function getMonth(date, index) {

        var tokens = splitDateFormat(date);
        return tokens[index];
    }

    /**
     * This method gets the date index from the supplied format
     */
    function getDateIndex(format) {

        var tokens = splitDateFormat(format);

        if (tokens[0] === 'DD'
                || tokens[0] === 'dd') {
            return 0;
        } else if (tokens[1] === 'DD'
                || tokens[1] === 'dd') {
            return 1;
        } else if (tokens[2] === 'DD'
                || tokens[2] === 'dd') {
            return 2;
        }
        // Returning the default value as -1
        return -1;
    }

    /**
     * This method returns the date string located at the supplied index
     */
    function getDate(date, index) {

        var tokens = splitDateFormat(date);
        return tokens[index];
    }

    /**
     * This method returns true if date1 is before date2 else return false
     */
    function isBefore(date1, date2, format) {
        // Validating if date1 date is greater than the date2 date
        if (new Date(getYear(date1, getYearIndex(format)), 
                getMonth(date1, getMonthIndex(format)) - 1, 
                getDate(date1, getDateIndex(format))).getTime()
            > new Date(getYear(date2, getYearIndex(format)), 
                getMonth(date2, getMonthIndex(format)) - 1, 
                getDate(date2, getDateIndex(format))).getTime()) {
            return true;
        } 
        return false;                
    }

    /**
     * This method returns true if date1 is after date2 else return false
     */
    function isAfter(date1, date2, format) {
        // Validating if date2 date is less than the date1 date
        if (new Date(getYear(date2, getYearIndex(format)), 
                getMonth(date2, getMonthIndex(format)) - 1, 
                getDate(date2, getDateIndex(format))).getTime()
            < new Date(getYear(date1, getYearIndex(format)), 
                getMonth(date1, getMonthIndex(format)) - 1, 
                getDate(date1, getDateIndex(format))).getTime()
            ) {
            return true;
        } 
        return false;                
    }

    /**
     * This method returns true if date1 is equals to date2 else return false
     */
    function isEquals(date1, date2, format) {
        // Validating if date1 date is equals to the date2 date
        if (new Date(getYear(date1, getYearIndex(format)), 
                getMonth(date1, getMonthIndex(format)) - 1, 
                getDate(date1, getDateIndex(format))).getTime()
            === new Date(getYear(date2, getYearIndex(format)), 
                getMonth(date2, getMonthIndex(format)) - 1, 
                getDate(date2, getDateIndex(format))).getTime()) {
            return true;
        } 
        return false;
    }

    /**
     * This method validates and returns true if the supplied date is 
     * equals to the current date.
     */
    function isCurrentDate(date, format) {
        // Validating if the supplied date is the current date
        if (new Date(getYear(date, getYearIndex(format)), 
                getMonth(date, getMonthIndex(format)) - 1, 
                getDate(date, getDateIndex(format))).getTime()
            === new Date(new Date().getFullYear(), 
                    new Date().getMonth(), 
                    new Date().getDate()).getTime()) {
            return true;
        } 
        return false;                
    }

    /**
     * This method validates and returns true if the supplied date value 
     * is before the current date.
     */
    function isBeforeCurrentDate(date, format) {
        // Validating if the supplied date is before the current date
        if (new Date(getYear(date, getYearIndex(format)), 
                getMonth(date, getMonthIndex(format)) - 1, 
                getDate(date, getDateIndex(format))).getTime()
            < new Date(new Date().getFullYear(), 
                    new Date().getMonth(), 
                    new Date().getDate()).getTime()) {
            return true;
        } 
        return false;                
    }

    /**
     * This method validates and returns true if the supplied date value 
     * is after the current date.
     */
    function isAfterCurrentDate(date, format) {
        // Validating if the supplied date is before the current date
        if (new Date(getYear(date, getYearIndex(format)), 
                getMonth(date, getMonthIndex(format)) - 1, 
                getDate(date, getDateIndex(format))).getTime()
            > new Date(new Date().getFullYear(),
                    new Date().getMonth(), 
                    new Date().getDate()).getTime()) {
            return true;
        } 
        return false;                
    }

    /**
     * This method splits the supplied date OR format based 
     * on non alpha numeric characters in the supplied string.
     */
    function splitDateFormat(dateFormat) {
        // Spliting the supplied string based on non characters
        return dateFormat.split(/\W/);
    }

    /*
     * This method validates if the supplied value is a valid date.
     */
    function isDate(date, format) {                
        // Validating if the supplied date string is valid and not a NaN (Not a Number)
        if (!isNaN(new Date(getYear(date, getYearIndex(format)), 
                getMonth(date, getMonthIndex(format)) - 1, 
                getDate(date, getDateIndex(format))))) {                    
            return true;
        } 
        return false;                                      
    }
</script>

아래는 HTML 스 니펫입니다.

<input type="text" name="start" id="start" size="10" value="" />
<br/>
<input type="text" name="end" id="end" size="10" value="" />
<br/>
<input type="button" value="Submit" onclick="javascript:validate();" />

우수한. 이것이 제가 찾던 것입니다.
Turbo

1

여기에있는 다른 게시물에서이 코드의 대부분을 가져 왔습니다 . 내 목적을 위해 수정했습니다. 이것은 내가 필요한 것을 위해 잘 작동합니다. 귀하의 상황에 도움이 될 수 있습니다.

$(window).load(function() {
  function checkDate() {
    var dateFormat = /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/;
    var valDate = $(this).val();
    if ( valDate.match( dateFormat )) {
      $(this).css("border","1px solid #cccccc","color", "#555555", "font-weight", "normal");
      var seperator1 = valDate.split('/');
      var seperator2 = valDate.split('-');

      if ( seperator1.length > 1 ) {
        var splitdate = valDate.split('/');
      } else if ( seperator2.length > 1 ) {
        var splitdate = valDate.split('-');
      }

      var dd = parseInt(splitdate[0]);
      var mm = parseInt(splitdate[1]);
      var yy = parseInt(splitdate[2]);
      var ListofDays = [31,28,31,30,31,30,31,31,30,31,30,31];

      if ( mm == 1 || mm > 2 ) {
        if ( dd > ListofDays[mm - 1] ) {
          $(this).val("");
          $(this).css("border","solid red 1px","color", "red", "font-weight", "bold");
          alert('Invalid Date! You used a date which does not exist in the known calender.');
          return false;
        }
      }

      if ( mm == 2 ) {
       var lyear = false;
        if ( (!(yy % 4) && yy % 100) || !(yy % 400) ){
          lyear = true;
        }

        if ( (lyear==false) && (dd>=29) ) {
          $(this).val("");
          $(this).css("border","solid red 1px","color", "red", "font-weight", "bold");
          alert('Invalid Date! You used Feb 29th for an invalid leap year');
          return false;
        }

        if ( (lyear==true) && (dd>29) ) {
          $(this).val("");
          $(this).css("border","solid red 1px","color", "red", "font-weight", "bold");
          alert('Invalid Date! You used a date greater than Feb 29th in a valid leap year');
          return false;
        }
     }
    } else {
      $(this).val("");
      $(this).css("border","solid red 1px","color", "red", "font-weight", "bold");
      alert('Date format was invalid! Please use format mm/dd/yyyy');
      return false;
    }
  };

  $('#from_date').change( checkDate );
  $('#to_date').change( checkDate );
});

1

Elian Ebbing 답변과 유사하지만 "\", "/", ".", "-", ""구분 기호를 지원합니다.

function js_validate_date_dmyyyy(js_datestr)
{
    var js_days_in_year = [ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
    var js_datepattern = /^(\d{1,2})([\.\-\/\\ ])(\d{1,2})([\.\-\/\\ ])(\d{4})$/;

    if (! js_datepattern.test(js_datestr)) { return false; }

    var js_match = js_datestr.match(js_datepattern);
    var js_day = parseInt(js_match[1]);
    var js_delimiter1 = js_match[2];
    var js_month = parseInt(js_match[3]);
    var js_delimiter2 = js_match[4];
    var js_year = parseInt(js_match[5]);                            

    if (js_is_leap_year(js_year)) { js_days_in_year[2] = 29; }

    if (js_delimiter1 !== js_delimiter2) { return false; } 
    if (js_month === 0  ||  js_month > 12)  { return false; } 
    if (js_day === 0  ||  js_day > js_days_in_year[js_month])   { return false; } 

    return true;
}

function js_is_leap_year(js_year)
{ 
    if(js_year % 4 === 0)
    { 
        if(js_year % 100 === 0)
        { 
            if(js_year % 400 === 0)
            { 
                return true; 
            } 
            else return false; 
        } 
        else return true; 
    } 
    return false; 
}

당신의 날과 달이 거꾸로되어 있습니다.
BoundForGlory

1
function fdate_validate(vi)
{
  var parts =vi.split('/');
  var result;
  var mydate = new Date(parts[2],parts[1]-1,parts[0]);
  if (parts[2] == mydate.getYear() && parts[1]-1 == mydate.getMonth() && parts[0] == mydate.getDate() )
  {result=0;}
  else
  {result=1;}
  return(result);
}

3
이 코드가 질문에 답할 수 있지만 문제를 해결하는 방법 및 / 또는 이유에 대한 추가 컨텍스트를 제공하면 답변의 장기적인 가치가 향상됩니다.
thewaywewere

1

순간은 그것을 해결하기에 정말 좋은 순간입니다. 날짜를 확인하기 위해 복잡성을 추가 할 이유가 보이지 않습니다 ... 잠시 살펴보십시오 : http://momentjs.com/

HTML :

<input class="form-control" id="date" name="date" onchange="isValidDate(this);" placeholder="DD/MM/YYYY" type="text" value="">

스크립트 :

 function isValidDate(dateString)  {
    var dateToValidate = dateString.value
    var isValid = moment(dateToValidate, 'MM/DD/YYYY',true).isValid()
    if (isValid) {
        dateString.style.backgroundColor = '#FFFFFF';
    } else {
        dateString.style.backgroundColor = '#fba';
    }   
};

0

첫 번째 문자열 날짜는 js 날짜 형식으로 변환되고 다시 문자열 형식으로 변환 된 다음 원래 문자열과 비교됩니다.

function dateValidation(){
    var dateString = "34/05/2019"
    var dateParts = dateString.split("/");
    var date= new Date(+dateParts[2], dateParts[1] - 1, +dateParts[0]);

    var isValid = isValid( dateString, date );
    console.log("Is valid date: " + isValid);
}

function isValidDate(dateString, date) {
    var newDateString = ( date.getDate()<10 ? ('0'+date.getDate()) : date.getDate() )+ '/'+ ((date.getMonth() + 1)<10? ('0'+(date.getMonth() + 1)) : (date.getMonth() + 1) )  + '/' +  date.getFullYear();
    return ( dateString == newDateString);
}

0

맞춤 기능이나 날짜 패턴을 사용할 수 있습니다. 아래 코드는 귀하의 요구 사항에 따라 사용자 정의 된 기능입니다.

 function isValidDate(str) {
        var getvalue = str.split('-');
        var day = getvalue[2];
        var month = getvalue[1];
        var year = getvalue[0];
        if(year < 1901 && year > 2100){
        return false;
        }
        if (month < 1 && month > 12) { 
          return false;
         }
         if (day < 1 && day > 31) {
          return false;
         }
         if ((month==4 && month==6 && month==9 && month==11) && day==31) {
          return false;
         }
         if (month == 2) { // check for february 29th
          var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
          if (day>29 || (day==29 && !isleap)) {
           return false;
         }
         }
         else{
         return true;

         }
        }

0

그러한 기본 주제에 대해 너무 오래되고 답변이 너무 많고 어느 것도 옳지 않은 게시물을 보는 것은 드문 일입니다. (나는 그들 중 아무도 작동하지 않는다는 것을 말하는 것이 아닙니다.)

  • 이를 위해 윤년 결정 루틴이 필요하지 않습니다. 언어는 우리를 위해 그 일을 할 수 있습니다.
  • 이를 위해 순간이 필요하지 않습니다.
  • Date.parse()로컬 날짜 문자열에는 사용하면 안됩니다. MDN 은 "ES5까지는 Date.parse를 사용하지 않는 것이 좋습니다. 문자열 구문 분석은 전적으로 구현에 따라 다릅니다." 표준에는 (잠재적으로 단순화 된) ISO 8601 문자열이 필요합니다. 다른 형식에 대한 지원은 구현에 따라 다릅니다.
  • new Date(string)Date.parse ()를 사용하기 때문에 사용 해서는 안됩니다 .
  • IMO 윤일을 확인해야합니다.
  • 유효성 검사 함수는 입력 문자열이 예상 형식과 일치하지 않을 가능성을 고려해야합니다. 예 : '1a / 2a / 3aaa', '1234567890'또는 'ab / cd / efgh'.

다음은 암시 적 변환이없는 효율적이고 간결한 솔루션입니다. 2018-14-29를 2019-03-01로 해석하려는 Date 생성자의 의지를 활용합니다. 몇 가지 최신 언어 기능을 사용하지만 필요한 경우 쉽게 제거 할 수 있습니다. 몇 가지 테스트도 포함했습니다.

function isValidDate(s) {
    // Assumes s is "mm/dd/yyyy"
    if ( ! /^\d\d\/\d\d\/\d\d\d\d$/.test(s) ) {
        return false;
    }
    const parts = s.split('/').map((p) => parseInt(p, 10));
    parts[0] -= 1;
    const d = new Date(parts[2], parts[0], parts[1]);
    return d.getMonth() === parts[0] && d.getDate() === parts[1] && d.getFullYear() === parts[2];
}

function testValidDate(s) {
    console.log(s, isValidDate(s));
}
testValidDate('01/01/2020'); // true
testValidDate('02/29/2020'); // true
testValidDate('02/29/2000'); // true
testValidDate('02/29/1900'); // false
testValidDate('02/29/2019'); // false
testValidDate('01/32/1970'); // false
testValidDate('13/01/1970'); // false
testValidDate('14/29/2018'); // false
testValidDate('1a/2b/3ccc'); // false
testValidDate('1234567890'); // false
testValidDate('aa/bb/cccc'); // false
testValidDate(null);         // false
testValidDate('');           // false

-1
  1. 자바 스크립트

    function validateDate(date) {
        try {
            new Date(date).toISOString();
            return true;
        } catch (e) { 
            return false; 
        }
    }
  2. JQuery

    $.fn.validateDate = function() {
        try {
            new Date($(this[0]).val()).toISOString();
            return true;
        } catch (e) { 
            return false; 
        }
    }

유효한 날짜 문자열에 대해 true를 반환합니다.


-3
var date = new Date(date_string)

'Invalid Date'유효하지 않은 date_string에 대한 리터럴 을 반환합니다 .

참고 : 아래의 설명을 참조하십시오.


거짓 : new Date("02-31-2000")제공합니다 Thu Mar 02 2000 00:00:00 GMT-0300 (BRT).
falsarella


작동하지 않는 사용 사례에 대해 자세히 알아 보려면 Mozilla의 날짜 매개 변수 문서에서 첫 번째 참고를 읽으십시오 .
falsarella

1
예, 저는 주로 임시 구문 분석을 작성하는 대안임을 보여주기 위해 이것을 남겨 둡니다. 위의 링크는 신뢰할 수 있습니다. 그래도 좋은 의사!
samis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.