转换无效日期的新日期无法正确验证日期

时间:2014-11-03 18:25:24

标签: javascript

这是我的问题:

new Date('02/30/2000')

Javascript转换为:

Wed Mar 01 2000 00:00:00 GMT-0300 (Local Standard Time)

如果javascript保持'纠正'我无法通过这种方式验证日期。自动日期。
我正在使用isNaN来检查日期是否有效,但我想它永远不会像我想的那样工作 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

您描述的行为正是JavaScript Date对象的工作原理。 The MDN reference描述得非常好:

  

注意: 其中 Date 作为具有多个参数的构造函数调用,如果值大于其逻辑范围(例如13作为月值提供或者为分钟值提供70),将调整相邻值。例如。 新日期(2013,13,1)相当于新日期(2014,1,1),两者都为 2014-02-01 <创建日期< / em>(请注意,月份为0)。与其他值类似:新日期(2013年,2日,1日,0日,70日)相当于新日期(2013年,2,1,1,10) 2013-03-01T01:10:00 创建日期。

没有内置的方法可以解决此问题。但是,已经编写了一些库来解决此问题以及Date对象的其他问题。具体来说,请考虑moment.js

moment('02/30/2000','MM/DD/YYYY').isValid()  // false

答案 1 :(得分:1)

var dateString = '01/03/2012';
var checkDate;
var flag = true;

try {
   checkDate = $.datepicker.parseDate('mm/dd/yy', dateString);
} catch (e) {
     flag = false;
}
if(flag)
    alert('Valid Date');
else
    alert('Invalid Date');

答案 2 :(得分:1)

以下是您可以这样做的方法:

var ValidDate = function (string) {
    var dateParts = string.match(/(\d{2})\/(\d{2})\/(\d{4})/),
        year = dateParts[3],
        month = dateParts[1],
        day = dateParts[2];

    var jsDate = new Date(string);

    if (year != jsDate.getFullYear() || month != jsDate.getMonth() + 1 || day != jsDate.getDate()) {
        return NaN;
    }
    return jsDate;
}


console.log(ValidDate("01/05/1989"));   // => Thu Jan 05 1989  ...
console.log(ValidDate("40/05/2010"));   // => NaN
console.log(ValidDate("05/40/2000"));   // => NaN