首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在JavaScript中验证"mm/dd/yyyy“格式的日期?

如何在JavaScript中验证"mm/dd/yyyy“格式的日期?
EN

Stack Overflow用户
提问于 2011-05-30 23:11:02
回答 14查看 460.4K关注 0票数 134

我想使用mm/dd/yyyy格式验证输入的日期格式。

我在一个网站上找到了下面的代码,然后使用了它,但它不起作用:

代码语言:javascript
复制
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!'); 
    } 
}

有什么建议可能是错误的吗?

EN

回答 14

Stack Overflow用户

发布于 2011-05-30 23:51:42

我认为Niklas对你的问题有正确的答案。除此之外,我认为下面的日期验证函数更容易阅读:

代码语言:javascript
复制
// 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];
};
票数 212
EN

Stack Overflow用户

发布于 2013-07-02 17:46:36

使用以下正则表达式进行验证:

代码语言:javascript
复制
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。

票数 49
EN

Stack Overflow用户

发布于 2011-05-30 23:24:04

它似乎可以很好地处理mm/dd/yyyy格式的日期,例如:

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

我对你的代码唯一的问题是:

代码语言:javascript
复制
var ExpiryDate = document.getElementById(' ExpiryDate').value;

在括号内的元素ID之前有一个空格。将其更改为:

代码语言:javascript
复制
var ExpiryDate = document.getElementById('ExpiryDate').value;

如果没有关于不起作用的数据类型的任何进一步细节,就没有太多其他信息可以输入。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6177975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档