8

我可以Date在 Javascript 中使用对象的最大和最小日期是多少?

是否可以表示古代历史日期(如January 1, 2,500 B.C.)或远在未来的日期(如October 7, 10,000)?

如果这些遥远的日期不能用Date对象表示,我应该如何表示它们?

4

1 回答 1

18

根据ECMA-262 规范的 §15.9.1.1

自 1970 年 1 月 1 日 UTC 以来,时间在 ECMAScript 中以毫秒为单位进行测量。
...
ECMAScript Date 对象支持的实际时间范围是 ... 精确到 –100,000,000 天到 100,000,000 天,相对于 1970 年 1 月 1 日 UTC 开始时的午夜测量。这为 1970 年 1 月 1 日 UTC 的任一侧提供了 8,640,000,000,000,000 毫秒的范围。

因此,该物体可表示的最早日期Date远远超出了已知的人类历史:

new Date(-8640000000000000).toUTCString()
// Tue, 20 Apr 271,822 B.C. 00:00:00 UTC

最新的日期足以持续超过Y10K甚至超过 Y100K,但需要在 Y276K 之前的几百年进行返工。

new Date(8640000000000000).toUTCString()
// Sat, 13 Sep 275,760 00:00:00 UTC

此范围之外的任何日期都将返回Invalid Date

new Date(8640000000000001)   // Invalid Date
new Date(-8640000000000001)  // Invalid Date

简而言之,JavaScriptDate类型足以测量 1970 年 1 月 1 日之前或之后大约 285,616 年的时间到毫秒精度。问题中发布的日期非常舒适地在此范围内。

于 2012-09-30T23:48:06.433 回答