最小和最大日期

我想知道 Javascript Date对象允许的最小日期和最大日期。我发现最小的日期大约是公元前200000年,但是我找不到任何关于它的参考资料。

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

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

221826 次浏览

来自 规格15.91.1:

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

时间在 ECMAScript 中以毫秒为单位,自1970年1月1日协调世界时以来。在时间值中,闰秒被忽略。假设每天有86,400,000毫秒。ECMAScript Number 值可以表示从 -9,007,199,254,740,992到9,007,199,254,740,992的所有整数; 这个范围足以测量从1970年1月1日开始,在大约285,616年内(向前或向后)的任何瞬间的毫秒精度的时间。

ECMAScript Date 对象支持的实际时间范围稍微小一些: 相对于1970年1月1日协调世界时的午夜,精确度为 -100,000,000天到100,000,000天。这给出了到协调世界时1970年1月1日两侧的8,640,000,000,000,000毫秒的范围。

协调世界时1970年1月1日午夜的确切时刻用值 + 0表示。

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

为了补充 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

如您所见,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

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

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

Indeed, year -271,821 is actually 271,822 BCE because JavaScript's Date (along with ISO 8601) uses astronomical year numbering, which uses a year zero. Thus, year 1 is 1 CE, year 0 is 1 BCE, year -1 is 2 BCE, etc.

Var startingDate = new Date () . toISOString () . split (‘ T’)[0] + “ T00.00.001 Z”;//for 2022-07-2500000000 Var endingDate = new Date () . toISOString () . split (‘ T’)[0] + “ T23:59:59.999 Z”;