2011-10-03 87 views
4

我正在閱讀有關各種實現中JavaScript日期對象的混合/最大值的信息。全部JavaScript日期對象?

Mozilla文檔說JavaScript支持UNIX時代的「-100,000,000 days to +100,000,000」。如果我的數學是正確的,那麼兩邊應該是8.64e15毫秒。

Microsoft MSDN認爲JScript支持UNIX時代的「approximately 285,616 years」。

谷歌v8的單元測試表明從時代開始+/-1e8 days

的ECMAScript 5.1 specifies a little more clearly

時間是在ECMAScript中自1970年1月1日 UTC測量單位爲毫秒。在時間值閏秒被忽略。假定 每天正好有86,400,000毫秒。 ECMAScript Number 值可以表示從-9,007,199,254,740,992到 9,007,199,254,740,992的所有整數;這個範圍足以測量時間到 毫秒的精度,對於1970年1月1日UTC以前的或近期的大約 285,616年內的任何時刻。

通過的ECMAScript Date對象支持倍實際範圍是 略小:究竟-100,000,000天在1970年1月1日 UTC的開始相對測量午夜億天 。這給出了一個範圍的8,640,000,000,000,000毫秒 01月01日的兩側,1970年UTC

我很好奇,有沒有人知道任何實現其實際上是「從時代+/- 1E8天」支持此範圍?

+1

學習你正在考慮的應用程序將是非常有趣的,其中這個細節將是重要的:-) – Pointy

+1

他正在寫一個助焊劑電容器應用程序。 –

+0

當我滑倒並撞擊水槽邊緣時,我有了這個有趣的想法。 – mckamey

回答

2

我懷疑是否有這樣的實現是今天使用。一旦你支持整數範圍,沒有理由不支持日期範圍。整數範圍是js中Number類型的其他要求的副作用(參見標準中的8.5,Number基本上是IEEE 754)。所以這都是一種包裝。意思是,如果有這樣的實現,很可能他們沒有以正確的方式實現數字,這是不太可能的。

+0

這是一個很好的觀點。由於各種實現描述不一致,我開始懷疑它。我懷疑MSDN描述是ECMA的第一段,而其他的則來自第二段。 – mckamey

+1

爲了進一步支持這個答案:Chrome 14,FF2,FF7,IE7,IE9,Safari 5.1,Opera 11.51通過了這些QUnit測試https://gist.github.com/1265065 – mckamey

4

這適用於所有主要版本的瀏覽器:

var d = new Date(); 
d.setTime(8640000000000000); 
document.write(d); 

結果:

週五09月12日275760 20:00:00 GMT-0400(東部夏令時間)

這不起作用:

d.setTime(8640000000000001); 

在IE7/WinXP上我得到js錯誤。