我想知道 JavascriptDate
对象允许的最小和最大日期。我发现最小日期类似于公元前 200000 年,但我找不到任何关于它的参考。
有人知道答案吗?我只是希望它不依赖于浏览器。
“纪元时间”(= 1970-01-01 00:00:00 UTC+00 的毫秒数)的答案将是最好的。
我想知道 JavascriptDate
对象允许的最小和最大日期。我发现最小日期类似于公元前 200000 年,但我找不到任何关于它的参考。
有人知道答案吗?我只是希望它不依赖于浏览器。
“纪元时间”(= 1970-01-01 00:00:00 UTC+00 的毫秒数)的答案将是最好的。
一个 Date 对象包含一个 Number ,指示一个特定的时间到一毫秒内。这样的数字称为时间值。时间值也可能是 NaN,表示 Date 对象不代表特定的时刻。
时间在 ECMAScript 中以 UTC 时间 1970 年 1 月 1 日以来的毫秒为单位进行测量。在时间值中,闰秒被忽略。假设每天正好有 86,400,000 毫秒。ECMAScript Number 值可以表示从 –9,007,199,254,740,992 到 9,007,199,254,740,992 的所有整数;此范围足以测量从 UTC 时间 1970 年 1 月 1 日起向前或向后大约 285,616 年内的任何时刻的毫秒精度。
ECMAScript Date 对象支持的实际时间范围略小:相对于 UTC 时间 1970 年 1 月 1 日开始的午夜,正好是 –100,000,000 天到 100,000,000 天。这为 1970 年 1 月 1 日 UTC 的任一侧提供了 8,640,000,000,000,000 毫秒的范围。
UTC 时间 1970 年 1 月 1 日开始的午夜的确切时刻由值 +0 表示。
第三段是最相关的。根据该段落,我们可以从 中获得每个规范的准确最早日期new Date(-8640000000000000)
,即公元前 271,821 年 4 月 20 日,星期二(公元前 =共纪之前,例如 -271,821 年)。
为了增加 TJ 的答案,超过最小值/最大值会生成无效日期。
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
如您所见,01/01/1970 返回 0,这意味着它是可能的最低日期。
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