2012-09-30 28 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)'是你得到的日期,最早的有效日期。 –