Javascript 新日期转换无效日期,可以';不能正确地验证日期

Javascript 新日期转换无效日期,可以';不能正确地验证日期,javascript,Javascript,我的问题是: new Date('02/30/2000') Javascript转换为: Wed Mar 01 2000 00:00:00 GMT-0300 (Local Standard Time) 如果javascript继续自动“更正”日期,我无法通过这种方式验证日期。 我使用了isNaN来检查日期是否有效,但我想它永远不会像我想的那样工作。 如何解决这个问题?您描述的行为正是JavaScriptDate对象的工作方式。对它的描述如下: 注意:当Date被调用为具有多个参数的构造函数时

我的问题是:

new Date('02/30/2000')
Javascript转换为:

Wed Mar 01 2000 00:00:00 GMT-0300 (Local Standard Time)
如果javascript继续自动“更正”日期,我无法通过这种方式验证日期。
我使用了
isNaN
来检查日期是否有效,但我想它永远不会像我想的那样工作。

如何解决这个问题?

您描述的行为正是JavaScript
Date
对象的工作方式。对它的描述如下:

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

没有内置的方法来解决此行为。但是,有些库是为了解决这个问题和Date对象的其他问题而编写的。具体而言,考虑:


您描述的行为正是JavaScript
Date
对象的工作方式。对它的描述如下:

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

没有内置的方法来解决此行为。但是,有些库是为了解决这个问题和Date对象的其他问题而编写的。具体而言,考虑:


以下是您如何做到这一点:

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

以下是您如何做到这一点:

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

谁说了关于JQuery或日期选择器的事?我认为使用JQuery比使用一个全新的资产来验证日期要好。谁说了关于JQuery或日期选择器的事?我认为使用JQuery比使用全新的资产来验证日期要好
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