有效日期作为invalida date Javascript的输出

有效日期作为invalida date Javascript的输出,javascript,validation,date,Javascript,Validation,Date,我无法理解为什么javascript在给出无效日期时给出的有效日期等于12月1日?这种行为是否因特定原因而被纳入语言中?因为它对于我的用例来说一定是无效的日期 新日期(“2017年11月31日”)首先,设计的目的不是验证输入,甚至不是挑剔。相反,它被明确设计为不惜任何代价创建一个实例,具有如下创造性规则: 其中Date作为具有多个参数的构造函数调用,如果 值大于其逻辑范围(例如,13作为 月份值或分钟值为70),相邻值将 调整一下。例如,新日期(2013年13月1日)等同于新日期 日期(2014

我无法理解为什么javascript在给出无效日期时给出的有效日期等于12月1日?这种行为是否因特定原因而被纳入语言中?因为它对于我的用例来说一定是无效的日期 新日期(“2017年11月31日”)首先,设计的目的不是验证输入,甚至不是挑剔。相反,它被明确设计为不惜任何代价创建一个实例,具有如下创造性规则:

其中Date作为具有多个参数的构造函数调用,如果 值大于其逻辑范围(例如,13作为 月份值或分钟值为70),相邻值将 调整一下。例如,新日期(2013年13月1日)等同于新日期 日期(2014年1月1日)

所以,如果你真的需要验证日期,你需要找其他地方

截至2017年11月31日,建造商预计:

表示日期的字符串值。字符串的格式应为 由方法(也是的一个版本)识别

。。。看起来不错。但以下是(我的重点):

使用日期构造函数解析日期字符串(和date.parse, 由于浏览器的原因,强烈建议不要使用它们 差异和不一致

如果我们深入研究
Date.parse()
docs,我们最终会读到:

ECMAScript规范声明:如果字符串不符合 函数的标准格式可能会返回到任何 实现-特定的启发式或实现-特定的解析 算法。包含非法元素的无法识别的字符串或日期 ISO格式字符串中的值将导致Date.parse()返回 楠

但是,日期字符串中的无效值无法识别为ISO格式 根据ECMA-262的定义,可能会也可能不会导致NaN,具体取决于 浏览器和提供的值,例如:

// Non-ISO string with invalid date values
new Date('23/25/2014');
在Firefox 30和Firefox中将被视为2015年11月25日的本地日期 Safari 7中的日期无效


此回退案例就是您的约会对象遇到的情况。

我一直无法了解日期构造函数解析器的所有规则和异常。你确定它应该总是拒绝美国格式的日期吗?