JavaScript如何将'2021-06-01T11:17:00-07:00'转换为新德里时区时间
问题1:日期格式识别及ISO格式转换
你给出的2021-06-01T11:17:00-07:00本身就是符合ISO 8601标准的合法日期格式,末尾的-07:00为时区偏移标识,代表该时间比UTC时间晚7小时,也就是你提到的MST时区。JavaScript原生Date对象可直接识别该格式,无需额外转换。
问题2:代码输出与预期不符的原因
该问题来自你对Date实例方法的认知偏差:
getHours()、getMinutes()属于本地时间取值方法,返回值为代码运行设备所在时区对应的时间,而非输入日期的原时区时间。- 结合输出结果可判断你的设备位于新德里时区(UTC+5:30):原时间对应的UTC时间为
2021-06-01T18:17:00Z,叠加新德里的5小时30分偏移后,得到的时间就是23:47,输出符合预期。
如果需要获取指定时区的时间,可使用Intl.DateTimeFormat接口指定时区输出。
问题3:反向转换结果不一致的原因
差异由两个规则共同导致:
- 你向
Date构造函数传入不带时区标识的字符串"2021-06-01 11:17:00"时,JavaScript会默认将其识别为设备本地时区(新德里UTC+5:30)的时间,而非原输入的MST时区时间。 toISOString()方法固定返回UTC时区的ISO格式时间,因此新德里时区的2021-06-01 11:17:00减去5小时30分偏移后,得到UTC时间2021-06-01T05:47:00.000Z,和原MST时区的时间自然不匹配。
新德里时区转换实现示例
如果需要将输入的MST时区时间转换为新德里时区的格式化时间,可参考以下代码:
const inputDate = new Date('2021-06-01T11:17:00-07:00'); // 指定时区为新德里(时区标识为Asia/Kolkata) const ndFormatter = new Intl.DateTimeFormat('zh-CN', { timeZone: 'Asia/Kolkata', year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false }); // 输出新德里时区对应的时间字符串 console.log(ndFormatter.format(inputDate));
内容的提问来源于stack exchange,提问作者user2869736
相关产品推荐
相关产品推荐

