我可以通过Javascript在浏览器中设置本地时区吗
Can I set the local timezone in my browser via Javascript?
我知道我可以通过new Date().getTimeZoneOffset()获得本地时区偏移量。但是Javascript从哪里得到的信息?有没有一种方法可以设置它,以便所有未来的Date对象都有我想要的偏移量?我尝试在Firebug中搜索DOM,但找不到任何内容。
我试图实现的是将epoch时间转换为可读格式,但无论浏览器的操作系统设置如何,它都需要在US/Central中。因为我使用的是US/Central,所以它与GMT没有固定的区别。所以,与其说是一堆非常讨厌的转换步骤,为什么我不能告诉Javascript我实际上在US/Centre呢?
当前,Moment Timezone允许我们使用moment.tz.setDefault()
设置"浏览器"的默认时区。
您将不得不使用moment()
而不是Date()
,但这仍然是对奇怪的JS-Date对象的一个很好的升级。
我知道我可以通过new Date().getTimeZoneOffset()获得本地时区偏移量。但是Javascript从哪里得到的信息呢?
ECMAScript的实现有望确定本地时区调整。
有没有一种方法可以设置它,以便所有未来的Date对象都有我想要的偏移量?
没有。
所以,与其说是一堆非常讨厌的转换步骤,为什么我不能告诉Javascript我实际上在美国/中央呢?
你考虑过使用图书馆吗?
我意识到这是一篇老文章,但momentJS是一个强大的javascript库,可以操作日期/时间对象
输出格式
如果您关心输出格式,如果您在本地时区(例如使用Intl
)或dayjs
或moment
之类的库中需要Date
对象,则始终需要在输出之前对其进行格式化。
从具有非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]
- 分析特定区域设置(而不是时区!)中的日期字符串
- 更改默认时区后,如何在本地时间设置时刻格式
- 如何在时间标签和相同的类中以UTC格式重新格式化ISO 8601时间戳,并通过JavaScript根据用户区域设置和时区
- 如何使用momentjs将澳大利亚/墨尔本时区设置为倒计时计时器
- 使用JS检查用户是否在EST时区和设置的EST时间范围内
- 用javascript设置浏览器窗口的默认时区
- 在Protractor测试中设置浏览器时区
- 情节.js为类型设置时区:“日期”
- 在首次页面加载之前设置时区 Cookie
- 传递javascript变量以在PHP中设置时区
- 为时区设置 AngularJS 全局配置
- 将 jquery-ui-timepicker.js 的“Now”按钮设置为 UTC 时区
- 如何使用jQuery/javascript根据服务器上设置的时区设置“日期控制”的今天日期
- 在 session.createDateTime 中将日期设置为特定的 d/t 和时区
- Date.toLocaleString 使用区域设置格式但不调整时区
- 设置Javascript时间&来自SQL数据库和asp.net代码隐藏页的时区
- FullCalendar可在设置为本地时区时调整时区,但不适用于欧洲/雅典
- 如何在javascript中将我的默认时区设置为Ireland/dublin
- Angular JS、时区、货币和区域设置
- 如何在使用Javascript设置/获取值时使日期时间字段与时区无关