最小和最大日期


128

我想知道哪个是Javascript Date对象允许的最小和最大日期。我发现最小日期大约是200000 BC,但是我没有得到任何参考。

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

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


对于复制/粘贴答案:stackoverflow.com/questions/27093130/...
Kieveli

Answers:


177

根据规范§15.9.1.1

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

自1970年1月1日UTC以来,时间以ECMAScript表示,以毫秒为单位。在时间值上,leap秒将被忽略。假设每天精确地有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对象支持的实际时间范围略小:相对于UTC 1970年1月1日开始的午夜,精确到–100,000,000天至100,000,000天。这给UTC 1970年1月1日的任一侧提供了8,640,000,000,000,000毫秒的范围。

格林尼治标准时间1970年1月1日开始的确切午夜时刻由值+0表示。

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


1
这启发了像.net中的isMin isMax字段... gist.github.com/QueueHammer/cb9bf736b81029d65485fb30ad01918d
QueueHammer

1
因此,这就是为什么它不适用于-922337203685477575808L ...即使在我将其更改为日期后,重载返回正超出范围值的情况。
deadManN

1
我不知道人们在抱怨什么,这对我来说很好。顺便说一句,我想知道是否有任何相反的方法(例如,输入BCE日期并以负整数形式显示纪元秒)?
Mark Seagoe

1
@MarkSeagoe- Date.UTC(-271821, 3, 20)返回-8640000000000000。:-)
TJ Crowder

new Date('275760-9-13 05:30:00')
AshTyson

52

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


-8

如您所见,1970年1月1日返回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

9
你的答案是什么?它如何回答最初的问题?
MaxArt

1970年1月1日不是最低的日期。您可以传递一个负数以获取1970年1月1日之前的日期。
inejwstine
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.