我可以在Javascript中使用Date
对象的最大日期和最短日期是多少?JavaScript中允许使用哪些日期范围?
是否可以表示古代历史日期(如January 1, 2,500 B.C.
)或日期远未来(如October 7, 10,000
)?
如果这些远离现在的日期不能用Date
对象表示,我应该如何表示它们?
我可以在Javascript中使用Date
对象的最大日期和最短日期是多少?JavaScript中允许使用哪些日期范围?
是否可以表示古代历史日期(如January 1, 2,500 B.C.
)或日期远未来(如October 7, 10,000
)?
如果这些远离现在的日期不能用Date
对象表示,我应该如何表示它们?
据§15.9.1.1 of the ECMA-262 specification,
时间是在ECMAScript中自1970年1月1日UTC测量单位为毫秒。
...
ECMAScript日期对象支持的实际时间范围是......精确到-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
总之,JavaScript的Date
类型将是足够用于测量时间1970 1月1日之前或之后在大约285616年至毫秒精度。问题中发布的日期在这个范围内非常舒适。
+1即时参考引用。 – 2012-09-30 23:49:44
我相信过去的日子有一个错字。这是我得到的 新日期(-8640000000000000).toUTCString()='星期二,4月20日-271821 00:00:00 GMT' – Rohit
@Rohit最后注意'1'。 '新日期(-8640000000000001)'是'无效日期',而'新日期(-8640000000000000)'是你得到的日期,最早的有效日期。 –
那么,问什么问题*“如果这些远离现在的日期不能表示......”*当你已经知道他们可以代表?为什么提出这个问题,如果你知道它没有实际意义? :P –
@ user1689607我不知道,没有它,这个问题就感觉不完整。 –
好吧,无论如何,这是一个有趣的问题。很高兴看到JS不会遇到2038年的问题。 –