老实说,我不确定如何表达这个问题。基本上打开一个JavaScript控制台(节点,您的浏览器或任何地方),然后尝试以下操作:
Date(564018060878018050) // 'Fri Nov 23 2018 06:22:20 GMT-0800 (Pacific Standard Time)'
new Date(564018060878018050) // <-- Invalid Date
我不知道为什么第一个无效,而第二个无效。还有另一种解析方法。我正试图避免为此使用图书馆。
答案 0 :(得分:5)
ECMAScript Date对象支持的实际时间范围是 [...]准确–100,000,000天至100,000,000天 相对于1970年1月1日开始的午夜测量 世界标准时间。这给出了8,640,000,000,000,000毫秒的范围 1970年1月1日世界标准时间的任意时刻。
有效范围小于您使用的值(564,018,060,878,018,050)。
And deep inside the Date(value)
constructor we have:
如果abs(time)> 8.64×10 15 ,则返回NaN。
这解释了为什么new Date(564018060878018050)
产生无效的日期。
As for Date(564018060878018050)
the specs say that:
...在不使用new的情况下调用构造函数的后果是 取决于构造函数。例如,Date()产生一个字符串 当前日期和时间的表示形式,而不是对象。
因此,Date(value)
应该以字符串而不是日期的形式返回当前日期 。
> Date(564018060878018050) === (new Date()).toString()
< true
> typeof Date(564018060878018050)
< "string"
答案 1 :(得分:0)
您将Date构造函数称为Function,并在ECMAscript doc中这样说:
“当Date作为函数而不是构造函数调用时,它将返回表示当前时间(UTC)的字符串。”
“ 注意函数调用Date(...)等效于具有相同参数的对象创建表达式new Date(...)。”
您可以在此处找到更多详细信息:https://www.ecma-international.org/ecma-262/5.1/#sec-15.9.2