使用Date.parse确定有效日期不一致

Roc*_*dra 7 javascript datetime parsing

如果我尝试使用以下语法解析日期:

var date1 = new Date(Date.parse('2013' + '/' + '02' + '/' + '29'));
Run Code Online (Sandbox Code Playgroud)

它将于2013年3月1日返回.

var date1 = new Date(Date.parse('2013' + '/' + '02' + '/' + '30'));
Run Code Online (Sandbox Code Playgroud)

它将于2013年3月2日返回.但如果我这样做

var date1 = new Date(Date.parse('2013' + '/' + '02' + '/' + '33'));
Run Code Online (Sandbox Code Playgroud)

它会回来Invalid Date.

我的观点是,为什么不是所有这些日期都归还Invalid Date

Tib*_*bos 3

正确解析所需的唯一格式Date.parse是 ISO 8601 的简化。您可以在ecma 规范中阅读有关确切格式的更多详细信息。

任何其他识别Date.parse为日期的格式都是特定于实现的。您提到的格式不是上述标准的一部分,因此每个实现都可以给出它们想要的任何结果。

碰巧的是,当你传入看起来像一个月中的某一天大于 31 的内容时,解析器会认为它是无效字符串,因此它将返回NaN. 由于月日不规则、闰年、缺失秒、时区等各种问题,检查日期是否有效要困难得多,因此不需要将所有这些逻辑放入解析器中。由于日期显然有效,它会被转换为时间戳并由 new Date() 返回,Date.parse此时 new Date() 可以使用。

结论是使用非标准格式Date.parse是不可靠的,应该尽可能避免。