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

给Date.prototype.getTime()传参会怎么样?两种Date用法毫秒值差异疑问

问题成因详解

1. 两个时间戳存在差异的原因

  • 第一种写法new Date(*some date*).getTime()是符合规范的正确用法:首先会基于你传入的目标日期字符串Jan 01, 2022 00:00:00实例化Date对象,getTime()返回该目标日期对应的毫秒时间戳,也就是你代码里date1的1640988000000。
  • 第二种写法new Date().getTime(*some date*)是无效用法:
    1. 首先new Date()无参数时,实例化的是代码运行瞬间的当前系统时间对应的Date对象
    2. Date.prototype.getTime()本身不接收任何参数,你传入的日期字符串会被直接忽略,返回的是当前时间的时间戳,也就是你代码里date2的1634672519002,这个值就是你运行代码那一刻的时间,自然和2022年1月1日的时间戳存在巨大差值。

2. 为什么打印的日期字符串看起来一致?

你调用的是不带new关键字的Date()方法,该方法的固有特性是:无论传入什么参数,都会直接返回调用瞬间的当前时间字符串,完全不会解析你传入的时间戳参数。
如果换成正确的时间戳解析方式new Date(date1).toString()和new Date(date2).toString(),打印结果会完全不同,分别对应2022年1月1日和你运行代码的时间。

可验证的修正代码

(function () {
  let dateToCount = "Jan 01, 2022 00:00:00";
  let date1 = new Date(dateToCount).getTime();
  let date2 = new Date().getTime(dateToCount);

  // 修正打印方式,正确解析时间戳
  console.log(new Date(date1).toString()); // Sat Jan 01 2022 00:00:00 GMT+0300 (Eastern European Summer Time)
  console.log(new Date(date2).toString()); // Tue Oct 19 2021 22:41:59 GMT+0300 (Eastern European Summer Time)
  console.log(`date1 = ${date1} ms`); // date1 = 1640988000000 ms
  console.log(`date2 = ${date2} ms`); // date2 = 1634672519002 ms
})();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:15:05