最小和最大日期

IT技术 javascript datetime max
2021-01-17 02:45:55

我想知道 JavascriptDate对象允许的最小和最大日期我发现最小日期类似于公元前 200000 年,但我找不到任何关于它的参考。

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

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

4个回答

规范,§15.9.1.1

一个 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 年)。

新日期('275760-9-13 05:30:00')
2021-03-29 02:45:55
@AshTyson - 如果您要问为什么会给您Invalid Date,原因有以下三个: 1. 如果您的年份数字超过四年,则必须在开头使用 a+-2. 它缺少0on 093. 仅在某些时区范围内(特别是:GMT+05:30 或更多),因为最晚日期是格林威治标准时间午夜 275760-09-13。更多关于这里的格式所以在 GMT+05:30(或 +06:00 等),这会起作用:new Date("+275760-09-13T05:30:00.000")
2021-04-01 02:45:55
我不知道人们在抱怨什么,这对我来说很好用。顺便说一句,我想知道是否有任何方法可以反向工作(即输入 BCE 日期并将纪元秒作为负整数弹出)?
2021-04-04 02:45:55
@MarkSeagoe -Date.UTC(-271821, 3, 20)返回-8640000000000000:-)
2021-04-07 02:45:55
所以这就是为什么它不能与 -9223372036854775808L 一起使用......即使在我将它更改为日期之后,resever 返回正值超出范围。
2021-04-09 02:45:55

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

对已接受答案的小幅修正;最小日期的年份实际上是 271,82 2 BCE,正如您在运行以下代码段时所看到的:

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

实际上,-271,821 年实际上是公元前 271,822 年,因为 JavaScript Date(以及ISO 8601)使用天文年份编号,即使用年份零。因此,第 1 年是公元 1 年,第 0 年是公元前 1 年,第 -1 年是公元前 2 年,依此类推。

你在技术上是正确的。最好的一种正确。
2021-04-03 02:45:55

如您所见,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
01/01/1970 是 UNIX 的开始时间,这就是为什么它返回 0 😉 en.wikipedia.org/wiki/Unix_time
2021-03-14 02:45:55
1/1/1970 不是可能的最低日期。您可以传递一个负数来获取 1/1/1970 之前的日期。
2021-03-15 02:45:55
你的回答有什么意义?它如何回答原始问题?
2021-03-26 02:45:55