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

JS日期计算时两个Date对象的差值为什么要除以1000?

JS日期差值计算除以1000的原因解释

核心原因

JavaScript 中两个 Date 实例做减法运算时,返回的是两个时间点相差的毫秒数,所有时间单位换算都是基于这个值做转换,除以1000的作用是把毫秒单位转换为秒单位,是时间单位换算的基础步骤。

1. Date 相减的底层逻辑

对 Date 类型做算术运算时,JS 会自动调用 Date 的 valueOf() 方法,返回该时间对应的Unix时间戳(单位为毫秒,即从1970年1月1日00:00:00 UTC到该时间点的毫秒数),因此两个日期相减的结果单位固定为毫秒:

const date1 = new Date('2024-01-02')
const date2 = new Date('2024-01-01')
console.log(date1 - date2) // 输出 86400000,刚好是1天的毫秒数

2. 各单位换算的逻辑

我们常用的时间单位进率是:

  • 1秒 = 1000毫秒
  • 1分钟 = 60秒 = 60 * 1000毫秒
  • 1小时 = 60分钟 = 60 * 60 * 1000毫秒
  • 1天 = 24小时 = 24 * 60 * 60 * 1000毫秒

所以除以1000就是先把基础的毫秒单位转成秒单位,再根据需要对应进率换算为更大的时间单位:

  • 计算总秒数:差值 / 1000,得到相差的总秒数
  • 计算总分钟数:差值 / (1000 * 60),得到相差的总分钟数
  • 计算总小时数:差值 / (1000 * 60 * 60),得到相差的总小时数
  • 计算总天数:差值 / (1000 * 60 * 60 * 24),得到相差的总天数

补充说明

你当前的代码计算的是两个时间点相差的总时长,比如相差1天2小时的话,会得到days=1, hours=26, minutes=1560, seconds=93600。如果要实现常规倒计时展示的「剩余X天X时X分X秒」(即小时范围0-23,分钟范围0-59,秒范围0-59),还需要对计算结果取余,示例如下:

const totalSeconds = Math.floor((newYearDate - currentDate) / 1000);
const days = Math.floor(totalSeconds / (60 * 60 * 24));
const hours = Math.floor(totalSeconds / (60 * 60) % 24);
const minutes = Math.floor(totalSeconds / 60 % 60);
const seconds = Math.floor(totalSeconds % 60);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:36:04