我有一个类似于"亚洲/加尔各答"的 IANA 时区代码,我需要在JavaScript中获取时区偏移,例如-330。但我无法获得时区偏移,希望能得到帮助。
我有一个类似于"亚洲/加尔各答"的 IANA 时区代码,我需要在JavaScript中获取时区偏移,例如-330。但我无法获得时区偏移,希望能得到帮助。
Date.toLocaleString
API:function timeZoneOffsetInMinutes(ianaTimeZone) {
const now = new Date();
now.setSeconds(0, 0);
// Format current time in `ianaTimeZone` as `M/DD/YYYY, HH:MM:SS`:
const tzDateString = now.toLocaleString('en-US', {
timeZone: ianaTimeZone,
hourCycle: 'h23',
});
// Parse formatted date string:
const match = /(\d+)\/(\d+)\/(\d+), (\d+):(\d+)/.exec(tzDateString);
const [_, month, day, year, hour, min] = match.map(Number);
// Change date string's time zone to UTC and get timestamp:
const tzTime = Date.UTC(year, month - 1, day, hour, min);
// Return the offset between UTC and target time zone:
return Math.floor((tzTime - now.getTime()) / (1000 * 60));
}
我希望借此机会向您推荐moment.js,它是一个非常棒的日期/时间库,支持我所需的所有功能。
例如:
moment().tz("Asia/Kolkata").offset(...)
可用于处理时区。
const kolkataTimeZone = timeZones.find( ({name}) => name === 'Asia/Kolkata' );
console.log(kolkataTimeZone.rawOffsetInMinutes); // 330
你也可以使用Luxon来完成它。
import { DateTime } from 'luxon'
export function getOffsetFromIANATimezone (ianaTimezone: string): number {
const dt =DateTime.now().setZone(ianaTimezone)
return (dt.offset / 60)
}
import dayjs from 'dayjs'
import utc from 'dayjs/plugin/utc'
import timezone from 'dayjs/plugin/timezone'
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.tz(undefined, 'Asia/Kolkata').format('ZZ')
我已经想出如何在JavaScript中从IANA时区代码获取时区偏移量。我使用了moment-timezone-with-data.js,如下所示:
var zone = moment.tz.zone('Asia/Kolkata');
zone.parse(Date.UTC(2012, 2, 19, 8, 30)); // -330