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

如何阻止dayjs插件将时间自动转换为UTC时区?

Dayjs 保留原时区时间的解决办法

输入带时区偏移的时间字符串2024-06-17T02:15:00+02:00,加载utc和timezone插件后,直接用dayjs(date).format('HH:mm')输出的是UTC时间00:15,想要得到原时区的02:15,可以用以下两种方法解决:

方法1:用utcOffset锁定原始偏移

import * as dayjs from 'dayjs';
import * as utc from 'dayjs/plugin/utc';
import * as timezone from 'dayjs/plugin/timezone';
dayjs.extend(utc);
dayjs.extend(timezone);

// ...

console.log('date', date, typeof date);
const myDate = dayjs(date);
// 提取原始偏移量,设置时保持时间值不变
myDate.utcOffset(myDate.utcOffset(), true);
console.log('time', myDate.format('HH:mm')); // 输出 02:15

方法2:用tz插件指定原始时区

从字符串里提取偏移,转成Dayjs支持的时区标识(注意Etc/GMT的命名和偏移方向相反,+02:00对应Etc/GMT-2):

import * as dayjs from 'dayjs';
import * as utc from 'dayjs/plugin/utc';
import * as timezone from 'dayjs/plugin/timezone';
dayjs.extend(utc);
dayjs.extend(timezone);

// ...

console.log('date', date, typeof date);
const offsetStr = date.match(/[+-]\d{2}:\d{2}$/)[0];
const timezoneId = `Etc/GMT-${offsetStr.slice(1, 3)}`;
const myDate = dayjs.tz(date, timezoneId);
console.log('time', myDate.format('HH:mm')); // 输出 02:15

为什么之前的方法没用?

加载utc插件后,Dayjs解析带时区的字符串时会默认转成UTC存储。之前尝试的dayjs.tz(date, dayjs.tz.guess())是转成本地时区,不是原时区;dayjs(date).tz(dayjs(date).format('Z'))的写法不符合tz方法的参数要求,所以无效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:24:51