有效日期将来自invalida date Javascript的输出

时间:2017-01-31 13:28:52

标签: javascript validation date

我无法理解为什么javascript在提供无效日期时给出的有效日期等于 1 dec 日期?这种行为是否因特定原因而被纳入语言?因为它必须是我的用例的无效日期 新日期(" 2017年11月31日")

1 个答案:

答案 0 :(得分:1)

首先,Date constructor并非旨在验证输入,甚至不挑剔。相反,它明确地设计为不惜任何代价创建实例,具有以下创意规则:

  

其中Date被调用为具有多个参数的构造函数,if   值大于它们的逻辑范围(例如13提供为   月份值或分钟值为70),相邻值将为   调整。例如。新日期(2013,13,1)相当于新的   日期(2014年,1,1)

因此,如果您确实需要验证日期,则需要查看其他地方。

关于11/31/2017,构造函数需要这样:

  

表示日期的字符串值。字符串应采用格式   由Date.parse()方法(IETF-compliant RFC 2822 timestamps以及ISO8601版本)识别。

......看起来不错。但接下来(强调我的):

  

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

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

  

ECMAScript规范声明:如果String不符合   该功能的标准格式可以归结为任何   特定于实现的启发式或特定于实现的解析   算法。无法识别的字符串或包含非法元素的日期   ISO格式字符串中的值将导致Date.parse()返回   为NaN。

     

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

// Non-ISO string with invalid date values
new Date('23/25/2014');
     

将被视为2015年11月25日在Firefox 30和Firefox中的当地日期   Safari 7中的无效日期

这个后备案例是你的约会日期。