Javascript允许哪些日期?

Pet*_*son 8 javascript datetime

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

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

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

Pet*_*son 16

根据ECMA-262规范的§15.9.1.1,

自UTC时间1970年1月1日起,时间以ECMAScript为单位,以毫秒为单位.
......
ECMAScript日期对象支持的实际时间范围是...... 相对于UTC时间1970年1月1日午夜测量的确切的-100,000,000天到100,000,000天.这给UTC时间1970年1月1日的任何一方提供了8,640,000,000,000,000毫秒的范围.

因此,Date对象的最早日期远远超出已知的人类历史:

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

最新的日期足以超过YKK甚至超过Y100K,但需要在Y276K之前的几百年内重新加工.

new Date(8640000000000000).toUTCString()
// Sat, 13 Sep 275,760 00:00:00 UTC
Run Code Online (Sandbox Code Playgroud)

超出此范围的任何日期都将返回Invalid Date.

new Date(8640000000000001)   // Invalid Date
new Date(-8640000000000001)  // Invalid Date
Run Code Online (Sandbox Code Playgroud)

简而言之,JavaScript Date类型足以在1970年1月1日之前或之后的大约285,616年内测量毫秒级精度.问题中贴出的日期非常舒适.