Javascript 如何从js中的时区获取UTC偏移量
使用普通JavaScript(即而不使用矩.js) 我有一个服务器返回一个时区字符串,比如Javascript 如何从js中的时区获取UTC偏移量,javascript,Javascript,使用普通JavaScript(即而不使用矩.js) 我有一个服务器返回一个时区字符串,比如Asia/TokyoAmerica/New\u York等等。。。 该时区独立于用户当前时区。因此,当我的当前操作系统时区为美国/纽约时,服务器可以返回亚洲/东京 从给定时区的服务器,我想将其格式化为=> UTC+09:00亚洲/东京 简单地说,我只想,从一个给定的时区,找到该时区的UTC偏移量 JS中有一个本机函数getTimezoneOffset,但我找不到setTimezone 我试着做一些类似的事情
Asia/Tokyo
America/New\u York
等等。。。
该时区独立于用户当前时区。因此,当我的当前操作系统时区为美国/纽约时,服务器可以返回亚洲/东京
从给定时区的服务器,我想将其格式化为=>
UTC+09:00亚洲/东京
简单地说,我只想,从一个给定的时区,找到该时区的UTC偏移量
JS中有一个本机函数getTimezoneOffset
,但我找不到setTimezone
我试着做一些类似的事情
var d = new Date()
new Date(d.toLocaleString('en-US', { timeZone: 'Asia/Tokyo' })).getTimezoneOffset()
但这总是返回我当前的偏移量
我该怎么做呢?你可以用它来计算,这个解决方案有点粗糙,因为我们正在格式化一个日期,然后进行解析。但它应该做你想做的
我将转换为“sv”日期格式,因为它与ISO-8601非常相似,然后解析以获得UTC日期
注:格林威治子午线以东时区的偏移量为负值,这与IANA惯例相同。如果希望在UTC前几分钟获得UTC偏移量,可以简单地反转。
另外,我在最后四舍五入,因为我们最初的日期将包含一个我们不感兴趣的毫秒分量
函数getUTCOffset(日期、时区){
const dateComponents=date.tolocalString(“sv”,{timeZone}).split(/[\-\s://);
//在JavaScript中,月份是以零为基础的
dateComponents[1]=dateComponents[1]-1;
const utcDate=Date.UTC(…dateComponents);
返回数学整数((日期-utcDate)/60/1000);
}
log(getUTCOffset(新日期(),'Asia/Tokyo');
log(getUTCOffset(新日期(),'America/Los_Angeles')代码>时区是否独立于当前时区?您能详细说明一下吗?本机JavaScript API不支持除本地时区(即用户将其操作系统设置为什么)和UTC以外的任何时区。@its4zahoor基本上是指如果我在美国/纽约,并且服务器提供
Asia/Tokyo
我希望Asia/Tokyo
的偏移量基于UTC,而不是基于我当前的时区(美国/纽约)@JoachimSauer所以你说我只能将本地时区的utcoffset设置为UTC,但我无法将所有其他(仍受日期支持)时区的偏移量设置为UTC?@Bobby:我不是JavaScript专家,但从date
API来看,我看不到任何指定(或查询)的支持任何其他时区。是什么让你认为其他时区“仍然受日期支持”?我明白了,是的,有点零碎,但我想它很管用,显然原生日期做得不好。谢谢。我认为这是原生JavaScript中实现这一点的唯一方法,我不知道还有其他方法!请记住,这种方法计算的偏移量取决于一年中的当前时间,并且可能会由于夏令时而发生变化。如果这用于或者UI中的指示,这可能会让用户感到困惑。如果它用于任何其他功能,可能会导致难看的错误。这是一个很好的观点,@JoachimSauer,如果所讨论的时区使用DST,UTC偏移量会有所不同。