我可以在Javascript中使用Date
对象的最长和最短日期是多少?
是否有可能代表古代历史日期(如January 1, 2,500 B.C.
)或未来的日期(如October 7, 10,000
)?
如果这些远离现在的日期无法用Date
对象表示,我应该如何表示它们?
答案 0 :(得分:16)
根据§15.9.1.1 of the ECMA-262 specification,
自UTC时间1970年1月1日起,ECMAScript中的时间以毫秒为单位 ...
ECMAScript日期对象支持的实际时间范围是......相对于UTC时间1970年1月1日午夜测量的确切 -100,000,000天到100,000,000天。这给出了8,640,000,000,000,000毫秒到8,640,000,000,000,000毫秒的范围世界于1970年1月1日的任何一方。
所以用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
简而言之,JavaScript Date
类型足以在1970年1月1日之前或之后的大约285,616年内测量毫秒精度的时间。问题中贴出的日期非常适合这个范围。