我需要根据时区(作为 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())
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'))