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

为何JavaScript中两种方式创建的Date日期值不一致?

为什么通过毫秒数调用JavaScript Date的结果不一样?

哈哈,这个坑很多刚接触JS的同学都会踩!核心原因是你用了两种完全不同的Date调用方式,咱们掰扯清楚:

两种调用的本质差异

  • new Date(ms):这是正经的构造函数调用,会生成一个Date对象,它会严格根据你传入的时间戳(从1970-01-01 UTC起算的毫秒数)计算对应的日期时间,完全符合你的预期。
  • Date(ms):这是普通函数调用,不管你传什么参数进去,它都会直接返回当前系统的本地时间字符串,传入的时间戳直接被忽略了!

哪一个结果是正确的?

new Date(1524862189829)的结果才是对的!咱们验证下这个时间戳:
把1524862189829转成UTC时间是2018-04-27T20:49:49.829Z,对应太平洋夏令时(GMT-0700)就是你看到的Fri Apr 27 2018 13:49:49 GMT-0700 (Pacific Daylight Time),完全匹配时间戳。

而Date(1524862189829)返回的是你调用这个函数瞬间的本地时间——你当时调用它的时候是4月30日15:29:44,所以它就返回了那个时间,和你传的毫秒数半毛钱关系都没有。

用代码实锤验证

你可以跑这段代码确认:

const ms = 1524862189829;
const d0 = new Date(ms); // 基于时间戳生成的Date对象
const d1 = Date(ms);     // 返回当前时间的字符串
const currentNow = new Date().toString(); // 获取调用时的当前时间

console.log(d0.toString()); // 输出时间戳对应的正确日期
console.log(d1 === currentNow); // 会打印true,证明d1就是当前时间

最后划重点

  • 如果要根据时间戳创建日期,必须用new Date(时间戳)的构造函数写法
  • 直接调用Date()(不管传不传参数)都是返回当前本地时间的字符串,参数直接被无视

内容的提问来源于stack exchange,提问作者Kuan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:53:31