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

Dayjs时区转换时时间值被修改?如何保留本地时间及疑问

dayjs timezone插件时间戳修改问题解析与解决方案

问题场景

使用dayjs/plugin/timezone插件时出现意外结果:

// 已设置默认时区为韩国(UTC+09:00),Node.js环境时区为UTC+00:00
const time = 1678806000000;

dayjs.tz(time).toDate();
// 返回日期对象对应的字符串:
"2023-03-14T06:00:00.000Z" // 对应时间戳1678773600000

原本预期时区转换仅改变显示的时区偏移,不会修改实际时间值,因此产生以下疑问:

  1. dayjs.tz为何会修改时间戳?是bug还是有意设计?
  2. 如何避免dayjs.tz转换时区时修改实际时间值?keepLocalTime选项仅存在于dayjs().tz(timezone, true)中,每次手动传时区过于繁琐。

问题原因

这是dayjs < 1.10.4版本的已知bug,并非有意设计。旧版本中dayjs.tz()处理时间戳时,错误地将时间戳当作目标时区的本地时间解析,而非UTC时间,导致最终时间戳被错误修改。

解决方案

1. 升级dayjs版本

直接升级到1.10.4及以上版本,该bug已被修复。升级后dayjs.tz(time)会正确将时间戳解析为UTC时间,再转换到默认时区,不会改变原始时间戳对应的实际时间。

2. 未升级时的临时方案

如果暂时无法升级,可以使用以下写法替代dayjs.tz(time):

dayjs(time).tz(dayjs.tz.guess(), true)
  • dayjs.tz.guess()会自动获取你设置的默认时区,无需手动重复传入;
  • 第二个参数true就是keepLocalTime选项,它会保留原始时间的本地时间值,仅转换时区偏移,不会修改时间戳对应的实际时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:22:44