我可以在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年的問題。 –