时区间时间转换问题:dayjs转换结果不符预期如何解决?
修复时区转换函数的问题
你的代码存在两个核心问题,导致结果不符合预期:
- 错误的时间解析逻辑:直接调用
dayjs("2024-01-16T18:30")会将字符串解析为本地时区的时间,再调用.tz('America/New-York')是把本地时间转成纽约时区,这和你需要的「将纽约时区的18:30转换为伦敦时区」逻辑完全相反。 - 格式字符串错误:
h:mmA是12小时制格式,而你预期的23:30是24小时制,需要改用对应格式符。
以下是修正后的代码:
// 确保已安装依赖:dayjs、dayjs-plugin-utc、dayjs-plugin-timezone import dayjs from 'dayjs'; import utc from 'dayjs/plugin/utc'; import timezone from 'dayjs/plugin/timezone'; dayjs.extend(utc); dayjs.extend(timezone); export const convertTimeByTimezones = ({ deadlineDateTime }) => { // 使用dayjs.tz()直接解析指定时区的时间字符串 const res = dayjs.tz(deadlineDateTime || "2024-01-16T18:30", 'America/New-York') .tz('Europe/London') .format('HH:mm'); // 24小时制格式 return res; // 返回23:30 };
关键说明
dayjs.tz(timeStr, timezone):该方法会直接将输入的时间字符串解析为对应时区的时间,是时区转换的正确起始方式,避免了本地时区的干扰。- 格式符
HH代表24小时制的小时(范围00-23),mm代表分钟,组合后即可输出23:30这种格式。 - 代码保留了
deadlineDateTime参数的使用,替换了硬编码的测试值,更符合实际业务场景。
内容的提问来源于stack exchange,提问作者Itay Tur
相关产品推荐
相关产品推荐

