You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:59:40