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

Dayjs计算两个日期时间差为何默认多出8小时?

Dayjs计算日期差结果多出8小时的原因及解决办法

你遇到的问题是因为错误地将时间差的毫秒数当作Unix时间戳来解析导致的:

当你用dayjs(result)处理diff返回的毫秒数时,Dayjs会把这个数值当成「从1970-01-01 00:00:00 UTC开始流逝的毫秒数」,也就是标准Unix时间戳。而我们处于东八区(UTC+8),这个UTC时间对应本地时间的1970-01-01 08:00:00,所以格式化后小时数默认显示为8,和实际时间差完全无关。

要得到正确的时分秒格式时间差,有两种常用解决方式:

方式一:手动计算时分秒

直接基于毫秒差值计算对应的小时、分钟、秒,再补零格式化:

const date1 = dayjs(Date.now())
const date2 = dayjs(1674235010388)

const diffMs = date1.diff(date2)

// 拆分时分秒
const hours = Math.floor(diffMs / (1000 * 60 * 60))
const minutes = Math.floor((diffMs % (1000 * 60 * 60)) / (1000 * 60))
const seconds = Math.floor((diffMs % (1000 * 60)) / 1000)

// 补零确保两位数格式
const formattedDiff = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`
console.log(formattedDiff)

方式二:使用Dayjs的Duration插件

Dayjs原生不支持时长处理,需要引入duration插件来专门处理时间差:
首先引入插件:

<script src="https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dayjs@1/plugin/duration.js"></script>

然后编写代码:

// 启用插件
dayjs.extend(window.dayjs_plugin_duration)

const date1 = dayjs(Date.now())
const date2 = dayjs(1674235010388)

const diffMs = date1.diff(date2)
// 创建时长对象
const duration = dayjs.duration(diffMs)

// 提取并格式化时分秒
const formattedDiff = `${duration.hours().toString().padStart(2, '0')}:${duration.minutes().toString().padStart(2, '0')}:${duration.seconds().toString().padStart(2, '0')}`
console.log(formattedDiff)

核心思路就是:时间差是一个「时长」,不是一个「具体的时间点」,不能用解析时间戳的方式来处理它。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:55:15