最短和最长日期

时间:2012-07-17 16:07:02

标签: javascript datetime max

我想知道Javascript Date对象允许的最小和最大日期。我发现最小日期大约是200000 B.C.,但我无法得到任何参考。

有谁知道答案?我只是希望它不依赖于浏览器。

“纪元时间”中的答案(= 1970-01-01 00:00:00 UTC + 00的毫秒数)将是最好的。

4 个答案:

答案 0 :(得分:151)

来自the spec, §15.9.1.1

  

Date对象包含一个数字,表示在一毫秒内的特定时刻。这样的数字称为时间值。时间值也可以是NaN,表示Date对象不代表特定的时刻。

     

自UTC时间1970年1月1日起,时间以ECMAScript为单位,以毫秒为单位。在时间值中,忽略闰秒。假设每天恰好有86,400,000毫秒。 ECMAScript数值可以表示从-9,007,199,254,740,992到9,007,199,254,740,992的所有整数;此范围足以测量从UTC时间1970年1月1日起向前或向后约285,616年内的任何瞬间的毫秒精度。

     

ECMAScript日期对象支持的实际时间范围略小:相对于UTC时间1970年1月1日午夜测量的时间恰好为-100,000,000天到100,000,000天。这给UTC时间1970年1月1日左右的8,640,000,000,000,000毫秒范围。

     

UTC时间1970年1月1日午夜的确切时刻由值+0表示。

第三段是最相关的。根据该段,我们可以从new Date(-8640000000000000)获得每个规格的确切最早日期,即公元前271,821(星期二),公元前271,821(星期二),例如,年份-271,821)。

答案 1 :(得分:36)

为了增加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

答案 2 :(得分:2)

对已接受答案的小幅修正;最小日期的年份实际上是公元前 271,822,正如您在运行以下代码段时所看到的:

console.log(new Date(-8640000000000000).toLocaleString("en", {"year": "numeric", "era": "short"}))

确实,-271,821 年实际上是公元前 271,822 年,因为 JavaScript 的 Date(连同 ISO 8601)使用 astronomical year numbering,它使用年份零。 因此,第 1 年是 1 CE,第 0 年是 1 BCE,第 -1 年是 2 BCE,依此类推。

答案 3 :(得分:-3)

代码更清晰但效率更低

new Date('1970-01-01Z00:00:00:000') //returns Thu Jan 01 1970 01:00:00 GMT+0100 (Central European Standard Time)
new Date('1970-01-01Z00:00:00:000').getTime() //returns 0
new Date('1970-01-01Z00:00:00:001').getTime() //returns 1