我知道我可以通过 new Date().getTimeZoneOffset() 获取本地时区偏移量。 但是 Javascript 从哪里获得这些信息呢? 有没有办法可以设置它,以便所有未来的 Date 对象都具有我想要的偏移量? 我尝试在 Firebug 中搜索 DOM,但找不到任何内容。
我想要完成的是将纪元时间转换为可读格式,但它需要在美国/中部,无论浏览器的操作系统设置是什么。 因为我使用的是 US/Central,所以它与 GMT 之间没有固定的差异。 因此,为什么我不能直接告诉 Javascript 我实际上在美国/中部,而不是一堆超级讨厌的转换步骤?
我知道我可以通过 new Date().getTimeZoneOffset() 获取本地时区偏移量。但是 Javascript 从哪里获得这些信息呢?
有没有办法可以设置它,以便所有未来的 Date 对象都有我想要的偏移量?
没有。
所以我为什么不能告诉 Javascript 我实际上在美国/中部,而不是一堆超级讨厌的转换步骤?
您考虑过使用图书馆吗?
如果您担心输出格式,如果您需要在本地时区(例如使用
Date
)或像
Intl
这样的库,则始终需要在输出之前格式化您的 dayjs
对象。 或 moment
。
Date
对象您可以在纯JS中设置偏移量:
new Date('2022-10-29T12:50:00.000+02:00')
将包含2022-10-29T10:50:00.000Z
。您只需始终以 /^[+-][0-2]\d:[0-5]\d$/
格式指定时区偏移量即可。
console.log(new Date('2022-10-29T12:50:00.000+02:00').toISOString())
// Output
// 2022-10-29T10:50:00.000Z
现在,如果您想从
(new Date()).getTimezoneOffset()
获取该格式的偏移量(例如 -120
),您需要
const tzOffsetNumber = (new Date()).getTimezoneOffset()
const tzOffsetString = `${tzOffsetNumber > 0 ? '+' : '-'}${Math.floor(Math.abs(tzOffsetNumber) / 60).toString().padStart(2, '0')}:${(Math.abs(tzOffsetNumber) % 60).toString().padStart(2, '0')}`
// Note: We need to specify a date in order to also consider DST settings.
const date = new Date()
const ianaTimezone = 'Europe/Bratislava'
const tzOffsetString = new Intl.DateTimeFormat('en', {timeZone: ianaTimezone, timeZoneName: 'longOffset'}).format(date).match(/[\d+:-]+$/)?.[0]
我意识到这是一篇旧文章,但是momentJS是一个强大的JavaScript库来操作日期/时间对象