2012-09-30 38 views
5

我可以在Javascript中使用Date对象的最大日期和最短日期是多少?JavaScript中允许使用哪些日期范围?

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

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

+0

那么,问什么问题*“如果这些远离现在的日期不能表示......”*当你已经知道他们可以代表?为什么提出这个问题,如果你知道它没有实际意义? :P –

+0

@ user1689607我不知道,没有它,这个问题就感觉不完整。 –

+0

好吧,无论如何,这是一个有趣的问题。很高兴看到JS不会遇到2038年的问题。 –

回答

12

§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年至毫秒精度。问题中发布的日期在这个范围内非常舒适。

+0

+1即时参考引用。 – 2012-09-30 23:49:44

+0

我相信过去的日子有一个错字。这是我得到的 新日期(-8640000000000000).toUTCString()='星期二,4月20日-271821 00:00:00 GMT' – Rohit

+0

@Rohit最后注意'1'。 '新日期(-8640000000000001)'是'无效日期',而'新日期(-8640000000000000)'是你得到的日期,最早的有效日期。 –