我可以通过Javascript在浏览器中设置本地时区吗?

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

我知道我可以通过 new Date().getTimeZoneOffset() 获取本地时区偏移量。 但是 Javascript 从哪里获得这些信息呢? 有没有办法可以设置它,以便所有未来的 Date 对象都具有我想要的偏移量? 我尝试在 Firebug 中搜索 DOM,但找不到任何内容。

我想要完成的是将纪元时间转换为可读格式,但它需要在美国/中部,无论浏览器的操作系统设置是什么。 因为我使用的是 US/Central,所以它与 GMT 之间没有固定的差异。 因此,为什么我不能直接告诉 Javascript 我实际上在美国/中部,而不是一堆超级讨厌的转换步骤?

javascript timezone
4个回答
5
投票

我知道我可以通过 new Date().getTimeZoneOffset() 获取本地时区偏移量。但是 Javascript 从哪里获得这些信息呢?

ECMAScript 的实现预计将确定本地时区调整。

有没有办法可以设置它,以便所有未来的 Date 对象都有我想要的偏移量?

没有。

所以我为什么不能告诉 Javascript 我实际上在美国/中部,而不是一堆超级讨厌的转换步骤?

您考虑过使用图书馆吗?


5
投票

目前,Moment-Timezone 使我们能够使用

moment.tz.setDefault()
设置“浏览器”的默认时区。

您必须使用

moment()
而不是
Date()
,但这仍然是对奇怪的 JS Date 对象的一个很好的升级。


1
投票

输出格式

如果您担心输出格式,如果您需要在本地时区(例如使用

Date
)或像 
Intl 这样的库,则始终需要在输出之前格式化您的
dayjs
对象。
moment

根据非 UTC 时区的日期创建新的
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')}`

从 IANA 时区获取时区偏移字符串

// 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]

-1
投票

我意识到这是一篇旧文章,但是momentJS是一个强大的JavaScript库来操作日期/时间对象

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