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



我有一个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

这背后的原因是什么?

这背后的原因是new Date如何解释其参数。

查看相关原型,我们看到:

新日期(值)

新日期(日期字符串)

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

这意味着函数在传递字符串和数字时的行为不同。

value被MDN描述为:

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

dateString为:

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

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

现在,为什么它适用于* 1

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

您也可以使用parseInt来执行此操作,这更详细一些:

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

最新更新