为何new Date()需乘以1才不会返回无效日期?
为什么字符串时间戳直接用Date构造函数会返回无效日期?
这是个JavaScript日期处理里非常典型的小坑,我来给你理清楚背后的逻辑:
1. Date构造函数对不同参数的处理规则不一样
new Date()的行为完全取决于你传入的参数类型:
- 当传入数字时:它会把这个数字当作毫秒级的Unix时间戳来解析,直接对应到对应的时间点,这是我们处理时间戳时的预期行为。
- 当传入字符串时:它只会按照ISO 8601标准格式(比如
"2020-03-20T09:45:00")去尝试解析。而你拿到的"1584632700000"是纯数字组成的字符串,不属于ISO日期格式的范畴,所以Date构造函数无法识别,就返回了Invalid Date。
2. timestamp * 1的作用是类型转换
当你执行timestamp * 1时,JavaScript会触发隐式类型转换,把原本的字符串类型时间戳转换成数字类型。这时候再传给new Date(),就符合了它对数字参数的处理逻辑——把数字当作毫秒级时间戳解析,自然就能生成正确的日期对象,调用toISOString()也能得到有效的结果了。
补充:其他等效的类型转换方式
除了乘以1,你还可以用这些方式达到同样的效果:
new Date(+timestamp).toISOString()new Date(parseInt(timestamp, 10)).toISOString()new Date(Number(timestamp)).toISOString()
本质都是把字符串转成数字,让Date构造函数用正确的规则解析。
内容的提问来源于stack exchange,提问作者darcher
相关产品推荐
相关产品推荐

