Javascript Date对象返回错误时区偏移问题及解决方法
问题原因及修复方案
问题出在哪?
你当前的代码逻辑绕了个无效的弯路:先用toLocaleString生成新德里时区的时间字符串,再把这个字符串转成Date对象。但Date对象本质是基于UTC的时间戳,转的时候会用本地时区去解析这个字符串,相当于把新德里时间当成了本地时间来处理。最后再调用toLocaleString时没指定时区,自然就显示本地时区的偏移(比如你的GMT+2),而不是新德里的GMT+5。
修复方法
直接跳过中间转Date对象的步骤,在最终格式化的时候指定目标时区即可:
const options = { dateStyle: "long", timeStyle: "long", timeZone: "Asia/Kolkata" // 直接在这里指定目标时区 }; // 直接用当前时间结合指定时区的配置格式化 document.querySelector('#timezone-date-time').innerHTML = new Date().toLocaleString("en-US", options);
为什么这样可行?
toLocaleString方法本身就支持通过timeZone参数,直接将UTC时间戳格式化为指定时区的字符串,不需要额外的转换步骤。这样输出的日期、时间和时区偏移都会是新德里时区的正确值。
内容的提问来源于stack exchange,提问作者Abdelrahman
相关产品推荐
相关产品推荐

