我有一个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
这背后的原因是什么?
答案 0 :(得分:2)
背后的原因是 new Date
如何解释其论点。
查看我们看到的相关原型:
新日期(价值)
新日期(dateString)
value
是一个数字,dateString
是一个字符串。
这意味着当传递字符串和数字时,函数的作用会有所不同。
MDN将 value
描述为:
整数值,表示自1970年1月1日00:00:00 UTC以来的毫秒数,忽略闰秒(Unix Epoch;但考虑到大多数Unix时间戳函数以秒为单位计算)。
并且dateString
为:
表示日期的字符串值。该字符串应采用Date.parse()方法识别的格式(符合IETF的RFC 2822时间戳以及ISO8601的版本)。
由于您传递了一个字符串,它将使用第二方法尝试解析日期。
现在,为什么它适用于* 1
?
* 1
正在以隐式方式将字符串转换为数字。
您也可以使用 parseInt
执行此操作,这有点冗长:
new Date(parseInt('1584632700000', 10))