2012-07-17 234 views
87

我想知道哪一個是允許使用Javascript Date對象的最小日期和最大日期。我發現最低日期大約是200000 b.C.,但我無法獲得任何參考。最小和最大日期

有誰知道答案?我只是希望它不依賴於瀏覽器。

在 「信號出現時間」(從1970-01-01 00:00:00 UTC + 00 =毫秒)的回答將是最好的。

+0

對於複製/粘貼答案: http://stackoverflow.com/questions/27093130/how-to-get-the-minimum-and-maximum-date – Kieveli 2016-11-08 20:21:27

回答

129

the spec, §15.9.1.1

一個Date對象包含表示特定時刻到毫秒內數。這樣的數字被稱爲時間值。時間值也可以是NaN,表示Date對象不代表特定的時間。自1970年1月1日UTC

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

通過的ECMAScript Date對象支持倍實際範圍略小:在1970年1月1日UTC的開始相對於午夜測量準確-100,000,000天100,000,000天。 1970年1月1日UTC的任何一邊的時間範圍爲8,640,000,000,000,000毫秒。

午夜在01月01日開始時的確切時刻,1970年UTC由值+ 0來表示。

第三段是最相關的。基於該段,我們可以從new Date(-8640000000000000)(即4月20日星期二,271,821 BCE(BCE =在Common Era之前,例如-271,821年))獲得每個規格的最早確切日期。

+8

我猜這對大多數情況下是足夠的... :) – 2012-07-17 16:15:23

+62

現在我希望有人不會認爲這個世界將會在275760年9月13日結束...... – MaxArt 2012-07-17 16:16:16

+11

@MaxArt這將是我的275745歲生日,所以我當然希望不要! – 2012-07-17 16:24:34

12

爲了增強T.J.的回答,超出了最小值/最大值產生無效的日期。

let maxDate = new Date(8640000000000000); 
 
let minDate = new Date(-8640000000000000); 
 

 
console.log(new Date(maxDate.getTime()).toString()); 
 
console.log(new Date(maxDate.getTime() - 1).toString()); 
 
console.log(new Date(maxDate.getTime() + 1).toString()); // Invalid Date 
 

 
console.log(new Date(minDate.getTime()).toString()); 
 
console.log(new Date(minDate.getTime() + 1).toString()); 
 
console.log(new Date(minDate.getTime() - 1).toString()); // Invalid Date

相關問題