为什么JavaScript Date构造函数在此数字上失败,但作为方法正常工作

the*_*tor 1 javascript date typescript

老实说,我不确定如何说出这个问题.基本上打开一个JavaScript控制台(节点,您的浏览器或任何地方)并尝试这样做:

Date(564018060878018050) // 'Fri Nov 23 2018 06:22:20 GMT-0800 (Pacific Standard Time)'
new Date(564018060878018050) // <-- Invalid Date
Run Code Online (Sandbox Code Playgroud)

我不知道为什么第一个有效,第二个没有.还有另一种解析方法吗?我正试图远离使用库.

Sal*_*n A 5

规格说:

ECMAScript日期对象支持的实际时间范围是相对于UTC时间1970年1月1日午夜测量的-100,000,000天到100,000,000天.这给UTC时间1970年1月1日的任何一方提供了8,640,000,000,000,000毫秒的范围.

有效范围小于您使用的值(564,018,060,878,018,050).

Date(value)我们的构造函数内部深处:

如果abs(时间)> 8.64×10 15,则返回NaN.

这解释了为什么new Date(564018060878018050)产生无效日期.

至于Date(564018060878018050)规格说:

...在不使用new的情况下调用构造函数会产生依赖于构造函数的后果.例如,Date()生成当前日期和时间的字符串表示,而不是对象.

所以Date(value)应该将当前日期作为字符串而不是日期返回.

> Date(564018060878018050) === (new Date()).toString()
< true

> typeof Date(564018060878018050)
< "string"
Run Code Online (Sandbox Code Playgroud)