相关疑难解决方法(0)

为什么 JavaScript 将 1/1/0000 解释为 1/1/2000?

我遇到了一些奇怪的行为,虽然我对此并没有真正的问题,但我想知道其背后的原因。

我写了以下声明:

console.log(new Date("0000-1-1"));
console.log(new Date("0000-01-01"));
console.log(new Date("0000-01-01T00:00:00Z"));
console.log(new Date(0, 0, 1));
Run Code Online (Sandbox Code Playgroud)

虽然所有日期“看起来”相似,并且如果您使用正常的日/月/年表现相同,但在这种情况下却并非如此。

结果如下:

Sat Jan 01 2000 00:00:00 GMT+0100 (CET)
Sat Jan 01 0 01:00:00 GMT+0100 (CET)
Sat Jan 01 0 01:00:00 GMT+0100 (CET)
Mon Jan 01 1900 00:00:00 GMT+0100 (CET)
Run Code Online (Sandbox Code Playgroud)

这对我来说很有趣。我同意最后一个观点,因为JavaScript 规范明确规定了以下内容:

代表年份的整数值。0 到 99 之间的值映射到 1900 到 1999 年。请参见下面的示例。

我还可以理解第二个和第三个结果,因为这取决于RFC 2822。他们确实接受4*DIGITS年份,因此0000RFC 规范中的年份应该是 0(不过我没有完全阅读它)。

只是有点奇怪的是,其中一个Date构造函数可用于 1900 年以上的日期,而另一个构造函数允许更广泛的日期 (RFC)。

但是,我不明白第一个结果。2000年从何而来?我确实知道该日期并不是真正合适的日期,但它不应该返回Invalid Date而不是这个日期吗?

javascript date

5
推荐指数
1
解决办法
1663
查看次数

标签 统计

date ×1

javascript ×1