【问题标题】:What happens if Date.now () is greater than Number.MAX_SAFE_INTEGER?如果 Date.now() 大于 Number.MAX_SAFE_INTEGER 会发生什么?
【发布时间】:2020-05-21 23:04:27
【问题描述】:

当然,这又过了 20 万年。但是在Date.now()的值超过Number.MAX_SAFE_INTEGER的值之后,Javascript约会系统会报错吗?会有什么后果?

也许这个问题看起来很奇怪而且没用。但是谁能回答我的好奇心以及其他可能有同样问题的人。

【问题讨论】:

  • Date.now 返回的纪元时间仅计算自 1970 年 1 月 1 日以来的秒数。您有没有想过如何表示该时间之前的日期?忘记大约 200,000 年后的未来,那只是 50 年前!使用整数表示日期很方便,但这不是实现要求。您需要很长时间才能提出另一个支持更广泛日期的日期标准。
  • 我来自 202020 年——不再使用 javascript,因为我们不再有网页,我们已经超越了这种原始的信息传输形式——所有信息都被传递使用气味
  • @JaromandaX 哈哈哈
  • 电脑爆炸,小心。

标签: javascript date numbers unix-timestamp integer-overflow


【解决方案1】:

您所描述的内容已被 ECMA-262 排除。 Date.now 可以返回的最大值为±8.64e15,正好在ECMAScript 的range of integers safely supported 之内。

最大值可以代表时代(1970 年 1 月 1 日)任一侧的 1e9 天,因此范围约为 ±273,790 年。我认为有时间在问题出现之前解决它。

构造最大值的日期会返回 +275760-09-13T00:00:00.000Z 的日期。向时间值添加一毫秒会返回无效日期:

// Max value returnable by Date.now
let maxDateNowValue = 8.64e15;

console.log(new Date(maxDateNowValue).toISOString()); // +275760-09-13T00:00:00.000Z

// Max value plus 1 millisecond
let plusOneMS = maxDateNowValue + 1;

console.log(new Date(plusOneMS).toString()); // Invalid Date

【讨论】:

  • 这是一个很好的答案。 @LaodeMuhammadAlFatih,你为什么不接受?
  • @TakesiTokugawaYD 完成。对不起。我忘记接受了。
猜你喜欢
  • 1970-01-01
  • 2015-04-12
  • 2016-12-21
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 2011-04-08
  • 2011-06-26
  • 2021-11-22
相关资源
最近更新 更多