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

형식 을 사용하여 입력 에서 날짜 형식의 유효성을 검사하고 싶습니다 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!');
    }
}

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



답변

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];
};


답변

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

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

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

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

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


답변

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

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에 저에게 효과적입니다.


답변

모든 크레딧은 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];
}


답변

당신은 사용할 수 있습니다 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 에서 사용하는 것이 언제 권장되는지 살펴보십시오.


답변

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

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

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

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

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

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

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


답변

이 함수는 주어진 문자열이 올바른 형식 ( ‘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'));