全系列 JavaScript Date 对象?

发布于 2024-12-07 17:55:31 字数 1192 浏览 0 评论 0原文

我正在阅读有关各种实现中 JavaScript 日期对象的混合/最大值的信息。

Mozilla 文档称 JavaScript 支持“-100,000,000 天到 +100,000,000 两侧UNIX 时代的“。如果我的数学正确的话,两边应该都是 8.64e15 毫秒。

Microsoft MSDN 表示 JScript 支持“大约 285,616 年” UNIX 纪元。

Google v8 的单元测试表明 +/-1e8从纪元开始的天

ECMAScript 5.1 指定得更清楚一些

自 1970 年 1 月 1 日起,ECMAScript 中的时间以毫秒为单位进行测量 世界标准时间。在时间值中,闰秒被忽略。假设 每天正好有 86,400,000 毫秒。 ECMA 脚本编号 值可以表示从 –9,007,199,254,740,992 到 9,007,199,254,740,992;这个范围足以测量时间 大约范围内任何瞬间的毫秒精度 自 UTC 1970 年 1 月 1 日起,向前或向后 285,616 年。

ECMAScript Date 对象支持的实际时间范围是 稍小:正好 –100,000,000 天到 100,000,000 天 相对于 1970 年 1 月 1 日开始的午夜测量 世界标准时间。这给出了 8,640,000,000,000,000 毫秒的范围 UTC 时间 1970 年 1 月 1 日两侧

我很好奇,有谁知道任何实际支持此“距纪元 +/-1e8 天”范围的实现吗?

I'm reading info on the mix/max values of JavaScript date objects in various implementations.

Mozilla docs say JavaScript supports "-100,000,000 days to +100,000,000 on either side" of the UNIX epoch. If my math is correct, this should be 8.64e15 ms on either side.

Microsoft MSDN says JScript supports "approximately 285,616 years on either side" of the UNIX epoch.

The unit tests for Google v8 indicate +/-1e8 days from epoch.

ECMAScript 5.1 specifies a little more clearly:

Time is measured in ECMAScript in milliseconds since 01 January, 1970
UTC. In time values leap seconds are ignored. It is assumed that
there are exactly 86,400,000 milliseconds per day. ECMAScript Number
values can represent all integers from –9,007,199,254,740,992 to
9,007,199,254,740,992; this range suffices to measure times to
millisecond precision for any instant that is within approximately
285,616 years, either forward or backward, from 01 January, 1970 UTC.

The actual range of times supported by ECMAScript Date objects is
slightly smaller: exactly –100,000,000 days to 100,000,000 days
measured relative to midnight at the beginning of 01 January, 1970
UTC. This gives a range of 8,640,000,000,000,000 milliseconds to
either side of 01 January, 1970 UTC

I'm curious, does anyone know any implementation which do not actually support this "+/-1e8 days from epoch" range?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

拿命拼未来 2024-12-14 17:55:31

这适用于所有主要版本的浏览器:

var d = new Date();
d.setTime(8640000000000000);
document.write(d);

结果:

Fri Sep 12 275760 20:00:00 GMT-0400(东部夏令时间)

这不起作用:

d.setTime(8640000000000001);

在 IE7/WinXP 上,我收到 js 错误。

This works on all major version browsers:

var d = new Date();
d.setTime(8640000000000000);
document.write(d);

Results:

Fri Sep 12 275760 20:00:00 GMT-0400 (Eastern Daylight Time)

This does not work:

d.setTime(8640000000000001);

On IE7/WinXP I get js errors.

烟沫凡尘 2024-12-14 17:55:31

我怀疑今天是否有这样的实现。一旦支持整数范围,就没有理由不支持日期范围。而这个整数范围是 js 中 Number 类型的其他要求的副作用(参见标准中的 8.5,Number 基本上是 IEEE 754)。所以这一切都是一个包。这意味着,如果有这样的实现,很可能他们没有以正确的方式实现 Number,这是极不可能的。

I doubt there is such an implementation is use today. Once you support the integer range there's no reason not to support the date range. And that integer range is a side effect of the other requirements of the Number type in js (see 8.5 in the standard, Number is basically IEEE 754). So it's all kind of one package. Meaning, if there was such an implementation, most likely they aren't implementing Number in the correct fashion, which is highly unlikely.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文