new Date() 返回无效日期,除非 * 减 1?

dar*_*her 3 javascript datetime unix-timestamp

我有一个 JSON 对象,返回内容块的发布日期的 unix 时间戳。使用时此时间戳将返回为无效日期.toISOString(),除非我将其乘以 1。

举个例子

let timestamp = item[index].date; // returns string of "1584632700000"
let invalidDate = new Date(timestamp).toISOString(); // returns invalid Date
let validDate = new Date(timestamp * 1).toISOString(); // returns valid (and correct) Date
Run Code Online (Sandbox Code Playgroud)

这背后的原因是什么?

d3L*_*d3L 6

这背后的原因在于如何new Date解释其论点。

查看相关原型我们看到:

新日期(值)

新日期(日期字符串)

其中value有一个数字和dateString一个字符串。

这意味着当传递字符串和数字时,该函数的行为有所不同。

valueMDN 描述为:

表示自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数的整数值,忽略闰秒(Unix 纪元;但请考虑大多数 Unix 时间戳函数以秒为单位计数)。

dateString作为:

表示日期的字符串值。该字符串应采用 Date.parse() 方法识别的格式(符合 IETF 的 RFC 2822 时间戳以及 ISO8601 的版本)。

由于您向其传递了一个字符串,因此它将使用第二种方法来尝试解析日期。

现在,为什么它可以与 一起使用* 1

* 1正在以隐式方式将字符串转换为数字。

您还可以使用parseInt此方法来执行此操作,但更详细一些:

new Date(parseInt('1584632700000', 10))
Run Code Online (Sandbox Code Playgroud)