最小和最大日期

2022-08-30 02:05:41

我想知道哪个是Javascript对象允许的最小和最大日期。我发现最小日期大约是公元前200000年,但我无法获得任何关于它的参考。Date

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

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


答案 1

根据规范§15.9.1.1

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

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

ECMAScript Date 对象支持的实际时间范围略小:相对于 1970 年 1 月 1 日 UTC 开始的午夜测量的 –100,000,000 天到 100,000,000 天。这给出了 8,640,000,000,000,000,000 毫秒到 1970 年 1 月 1 日 UTC 任一边的范围。

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

第三段是最相关的。根据该段落,我们可以从中获得每个规范的确切最早日期,即公元前271,821年4月20日星期二(BCE =在共同时代之前,例如,年份-271,821)。new Date(-8640000000000000)


答案 2

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