使用moment-timezone将America/Dawson时区时间转America/New_York失败求助
问题分析与修正
原代码的核心问题是没有正确构建America/Dawson时区的上午9:00时间,具体问题点:
new Date()创建的是基于你本地(印度)时区的日期对象,setHours(9,0,0)设置的是印度时区的上午9点,而非目标时区的时间。- 虽然调用了
moment.tz.setDefault('America/Dawson'),但moment(currentDate)依然是把本地时区的Date实例转换为moment对象,并没有关联到Dawson时区的时间基准。
正确实现方式
方式一:直接创建指定时区的今日9点时间
// 直接构建America/Dawson时区的今日上午9:00 const dawsonTime = moment.tz('09:00', 'HH:mm', 'America/Dawson'); // 转换为America/New_York时区并格式化输出 const newYorkTime = dawsonTime.tz('America/New_York').format('YYYY-MM-DD HH:mm:ss ZZ'); console.log(newYorkTime);
方式二:基于Dawson时区的当前日期设置9点
如果需要确保使用Dawson时区的"今日"来设置9点,可以用以下写法:
// 设置moment默认时区为America/Dawson moment.tz.setDefault('America/Dawson'); // 获取Dawson时区的当前日期,将时间设为9:00:00 const dawsonTime = moment().set({ hour: 9, minute: 0, second: 0 }); // 转换为America/New_York时区 const newYorkTime = dawsonTime.tz('America/New_York').format('YYYY-MM-DD HH:mm:ss ZZ'); console.log(newYorkTime);
这两种写法都会先正确生成Dawson时区的上午9点,再转换为New York时区的时间,确保结果符合预期。
内容的提问来源于stack exchange,提问作者Supriya Kumari
相关产品推荐
相关产品推荐

