我想知道JavaScript的Date
对象允许设置的最小和最大日期是什么。我发现最小日期大约在公元前200000年左右,但是没有找到确切的参考资料。
有人知道答案吗?我希望这不会取决于浏览器。
用“纪元时间”(从1970年01月01日00:00:00 UTC+00开始计算的毫秒数)回答最好。
我想知道JavaScript的Date
对象允许设置的最小和最大日期是什么。我发现最小日期大约在公元前200000年左右,但是没有找到确切的参考资料。
有人知道答案吗?我希望这不会取决于浏览器。
用“纪元时间”(从1970年01月01日00:00:00 UTC+00开始计算的毫秒数)回答最好。
来自规范,§15.9.1.1:
一个日期对象包含一个数字,表示某一时刻到毫秒的时间值。这样的数字称为时间值。时间值也可能是NaN,表示日期对象不代表特定的时间点。 在ECMAScript中,时间以自1970年1月1日UTC起的毫秒数来衡量。在时间值中,闰秒被忽略。假设每天恰好有86400000毫秒。ECMAScript数字值可以表示从-9007199254740992到9007199254740992的所有整数;这个范围足以以毫秒精度测量任何在距离1970年1月1日UTC前后约285616年内的任何时刻。 ECMAScript日期对象支持的实际时间范围略小:相对于1970年1月1日UTC午夜测量的确切时间为-100,000,000天至100,000,000天。这给出了距离1970年1月1日UTC前后8640000000000000毫秒的范围。 1970年1月1日UTC午夜准确时刻的值为+0。第三段是最相关的。根据该段落,我们可以从new Date(-8640000000000000)
获取规范中最早的确切日期,即公元前271,821年4月20日(BCE = 公元前Common Era,例如-271,821年)。
Date.UTC(-271821, 3, 20)
返回 -8640000000000000
。 :-) - T.J. Crowdernew Date("+275760-09-13T05:30:00.000")
。 - T.J. Crowderlet 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
var startingDate = new Date().toISOString().split('T')[0] + "T00:00:00.001Z"; // 用于2022年07月25日 00时00分00秒 var endingDate = new Date().toISOString().split('T')[0] + "T23:59:59.999Z" ;
正如您所看到的,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