当我尝试Date.parse()一个整数或字符串0时,它返回946681200000,转换为以下日期:
周一01 01 01 00:00:00 GMT 0100(CET)
为什么?
我假设解析器将单个零解释为2000年,但规格没有说明单字符年份定义 – RFC 2822和ISO 8601都需要字符串中的四个字符年份.
我想更好地理解如何将字符串’0’解析为Date,为什么它被接受为有效日期(如果它不是NaN或某些这样的?)以及为什么选择2000年而不是例如1900.
更新
经过一番试验和错误,我发现单个数字实际上在不同的数字范围内有不同的解释.
> 0 – 12:2000年的一个月
> 13 – 31:NaN
> 32 – 49:2000年,所有其他值都设置为默认值
> 50 – 99:1950年,将所有其他值设置为默认值
> 100 – ??:一年,所有其他值都设置为默认值
解决方法
the specs say nothing about single-character year definition
The spec说:
If the String does not conform to 07001 the function may fall back to any implementation-specific heuristics or implementation-specific date formats.
有关V8的具体情况,请参阅this bug report,了解使用单个数字调用时无法预测的结果.您也可以直接阅读来源(dateparser.cc,dateparser.h,dateparser-inl.h).