如何获取特定时区的时区偏移量?

问题描述 投票:0回答:1

我需要根据时区(作为 TZ 标识符)对城市进行排序。为此,我发现最自然的方法是将这些时区的偏移量与 UTC 进行比较(但我愿意接受任何解决方案)。

Date.prototype.getTimezoneOffset()
似乎是完美的候选人,我从文档中获取了示例:

const myDate = new Date('August 19, 1975 23:15:30 GMT+07:00')
console.log(myDate.getTimezoneOffset())

示例的注释指出

// 预期输出:您的本地时区偏移量(以分钟为单位)
//(例如-120)。不是日期对象的时区偏移量。

我正在尝试处理这个问题,但我根本不明白如果它

always
将本地偏移量返回到UTS,无论它应用于哪个日期,那么我根本不明白什么Date.prototype.getTimezoneOffset()

如果上面是正确的(这看起来真的很奇怪,因为

getTimezoneOffset()
应用于日期对象),我怎样才能获得日期对象的 UTC 偏移量?

我最终将使用Day.js来操纵我的日期,所以我期望工作的最终代码(但它不符合上述)是

console.log(dayjs().tz('America/Los_Angeles').toDate().getTimezoneOffset())
javascript datetime timezone utc dayjs
1个回答
0
投票

JS 日期不包含时区信息,

getTimezoneOffset()
为您提供特定日期的本地时区偏移量。 直接解析您的日期字符串。 如果您想通过时区名称获取时区偏移量:

function getTimezoneOffset(timeZone){
  const str = new Date().toLocaleString('en', {timeZone, timeZoneName: 'longOffset'});
  const [_,h,m] = str.match(/([+-]\d+):(\d+)$/) || [, '+00', '00'];
  return h * 60 + (h > 0 ? +m : -m);
}

'America/Los_Angeles America/New_York Asia/Kolkata Pacific/Marquesas Etc/UTC'.match(/\S+/g).forEach(tz => 
  console.log(tz, getTimezoneOffset(tz))
);

从日期字符串解析:

function getTimezoneOffset(str){
  const [_,h,m] = str.match(/([+-]\d+):(\d+)$/) || [, '+00', '00'];
  return h * 60 + (h > 0 ? +m : -m);
}

console.log(getTimezoneOffset('August 19, 1975 23:15:30 GMT+07:00'))

© www.soinside.com 2019 - 2024. All rights reserved.