2012-07-17 235 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

相关问题