javascript – Date.parse(0)返回2000年的午夜,为什么?

前端之家收集整理的这篇文章主要介绍了javascript – Date.parse(0)返回2000年的午夜,为什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我尝试Date.parse()一个整数或字符串0时,它返回946681200000,转换为以下日期:

周一01 01 01 00:00:00 GMT 0100(CET)

为什么?

我假设解析器将单个零解释为2000年,但规格没有说明单字符年份定义 – RFC 2822ISO 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).

猜你在找的JavaScript相关文章