微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从js中的时区获取UTC偏移量

如何解决如何从js中的时区获取UTC偏移量

在Vanilla JavaScript中(即不使用Moment.js )。

我有一台服务器返回时区字符串,例如Asia/Tokyo America/New_York等。 该时区与用户当前时区无关。因此,当我当前的操作系统时区为Asia/Tokyo

时,服务器可以返回America/New_York

在给定时区的服务器上,我想将其格式化为=>

UTC+09:00 Asia/Tokyo

因此,简单地说,我只想从给定的时区中找到该时区的UTC偏移量。

JS中有一个本机函数getTimezoneOffset,但是我找不到setTimezone

我试图做类似的事情

var d = new Date()
new Date(d.toLocaleString('en-US',{ timeZone: 'Asia/Tokyo' })).getTimezoneOffset()

但这总是返回我当前的偏移量。

我该怎么做?

解决方法

您可以使用Date.toLocaleString()来计算此值,该解决方案有点不可靠,因为我们先格式化日期,然后解析。但是它应该做您想要的。

我将转换为“ sv”日期格式,因为它与ISO-8601非常相似,然后进行解析以获取UTC日期。

注意:格林威治子午线以东的时区偏移量为负,这与IANA约定相同。如果您希望在UTC提前 分钟后获得UTC偏移,则可以简单地进行反转。 另外,我将在四舍五入,因为我们的原始日期将包含我们不感兴趣的毫秒部分。

function getUTCOffset(date,timeZone) {
    const dateComponents = date.toLocaleString("sv",{ timeZone }).split(/[\-\s:]/);
    // Months are zero-based in JavaScript
    dateComponents[1] = dateComponents[1] - 1;
    const utcDate = Date.UTC(...dateComponents);
    return Math.round((date - utcDate) / 60 / 1000);
}

console.log(getUTCOffset(new Date(),'Asia/Tokyo'));
console.log(getUTCOffset(new Date(),'America/Los_Angeles'));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。