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