最小和最大date
我想知道哪些是Javascript Date
对象允许的最小和最大date。 我发现最低date大约是20万亿年,但我对此没有任何参考。
有人知道答案吗? 我只是希望它不依赖于浏览器。
在“纪元时间”(从1970-01-01 00:00:00 UTC + 00毫秒)中的答案将是最好的。
从规范中,§15.9.1.1 :
Date对象包含一个数字,指示一个毫秒内的特定瞬间。 这样的数字被称为时间值。 时间值也可以是NaN,表示Date对象不代表特定的时间。
时间自1970年1月1日起以毫秒为单位在ECMAScript中测量。 在闰秒的时间值被忽略。 假定每天正好有86,400,000毫秒。 ECMAScript数值可以表示从-9,007,199,254,740,992到9,007,199,254,740,992的所有整数; 这个范围足以测量在1970年1月1日UTC以前的或大约285,616年内任何瞬间的毫秒精度的时间。
由ECMAScript Date对象支持的实际时间范围略小:UTC时间1970年1月1日开始的午夜,相当于-100,000,000天至100,000,000天。 1970年1月1日UTC的任何一边的时间范围为864000000000毫秒。
1970年1月1日午夜UTC的准确时刻由值+0表示。
第三段是最相关的。 根据这一段,我们可以new Date(-8640000000000000)
,也就是4月20日星期二271,821 BCE(BCE =在共同时代之前,例如-271,821)得到每个规格的最早的date。
为了增加TJ的答案,超过最小/最大值会产生无效date。
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