如果 Date.now() 大于 Number.MAX_SAFE_INTEGER 会发生什么?

Lao*_*tih 5 javascript numbers date integer-overflow unix-timestamp

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

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

Rob*_*obG 8

ECMA-262 排除了您所描述的内容。Date.now可以返回的最大值是 \xc2\xb18.64e15,这完全在ECMAScript安全支持的整数范围内。

\n\n

最大值可以表示纪元(1970 年 1 月 1 日)两侧的 1e9 天,因此范围约为 \xc2\xb1273,790 年。我认为在问题出现之前会有时间解决它。

\n\n

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

\n\n

\r\n
\r\n
// Max value returnable by Date.now\r\nlet maxDateNowValue = 8.64e15;\r\n\r\nconsole.log(new Date(maxDateNowValue).toISOString()); // +275760-09-13T00:00:00.000Z\r\n\r\n// Max value plus 1 millisecond\r\nlet plusOneMS = maxDateNowValue + 1;\r\n\r\nconsole.log(new Date(plusOneMS).toString()); // Invalid Date
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n