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

new Date() returning invalid date unless * by 1?

我有一个 JSON 对象返回内容片段发布日期的 unix 时间戳。使用 .toISOString() 时,此时间戳 returns 为无效日期,除非我将其乘以 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

这背后的原因是什么?

这背后的原因是new Date如何解释它的论点。

查看相关原型我们看到:

new Date(value)

new Date(dateString)

其中 value 是一个数字,dateString 是一个字符串。

这意味着函数在传递字符串和数字时表现不同。

value 被 MDN 描述为:

Integer value representing the number of milliseconds since January 1, 1970, 00:00:00 UTC, with leap seconds ignored (Unix Epoch; but consider that most Unix timestamp functions count in seconds).

dateString为:

String value representing a date. The string should be in a format recognized by the Date.parse() method (IETF-compliant RFC 2822 timestamps and also a version of ISO8601).

由于您向它传递了一个字符串,它将使用 second 方法来尝试解析日期。

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

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

您也可以使用 parseInt 来执行此操作,这有点冗长:

new Date(parseInt('1584632700000', 10))