我可以通过 Javascript 在浏览器中设置本地时区吗?
我知道我可以通过 new Date().getTimeZoneOffset() 获取本地时区偏移量。但是 Javascript 从哪里获得这些信息呢?有没有办法可以设置它,以便所有未来的 Date 对象都具有我想要的偏移量?我尝试在 Firebug 中搜索 DOM,但找不到任何内容。
我想要完成的是将纪元时间转换为可读格式,但它需要位于美国/中部,无论浏览器的操作系统设置如何。因为我使用的是 US/Central,所以它与 GMT 之间没有固定的差异。因此,为什么我不能直接告诉 Javascript 我实际上在美国/中部,而不是一堆超级讨厌的转换步骤?
I know I can get the local timezone offset via new Date().getTimeZoneOffset(). But where did Javascript get that information? Is there a way I can set it, so that all future Date objects have the offset I want? I tried searching the DOM in Firebug, but couldn't find anything.
What I am trying to accomplish is converting epoch times to readable format, but it needs to be in US/Central, no matter what the browser's OS setting. Because I am using US/Central, it's not a fixed difference from GMT. So instead of a bunch of super nasty conversion steps, why can't I just tell Javascript that I'm actually in US/Central?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
ECMAScript 的实现预计将确定本地时区调整。
不。
您是否考虑过使用库?
An implementation of ECMAScript is expected to determine the local time zone adjustment.
No.
Have you considered using a library?
目前,Moment-Timezone 使我们能够使用
moment.tz.setDefault()
。您必须使用
moment()
而不是Date()
,但这仍然是对奇怪的 JS Date 对象的一个很好的升级。Currently, Moment-Timezone enables us to set the "browser's" default timezone by using
moment.tz.setDefault()
.You'll have to use
moment()
instead ofDate()
, but this is still a nice upgrade over the weird JS Date object.输出格式
如果您关心输出格式,并且需要在本地时区(例如使用
Intl
) 或像dayjs
或时刻
。从非 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$/
格式指定时区偏移量。从时区偏移数获取时区偏移字符串
现在,如果您想从
(new Date()).getTimezoneOffset()
获取该格式的偏移量(例如-120
) ,您需要从 IANA 时区获取时区偏移字符串
Output format
If you are concerned about the output format, you always need to format your
Date
object prior to outputting it if you need it in a local timezone (e.g. usingIntl
) or you a library likedayjs
ormoment
.Create a new
Date
object from a date with a non-UTC timezoneYou can set an offset in pure JS:
new Date('2022-10-29T12:50:00.000+02:00')
will contain2022-10-29T10:50:00.000Z
. You just have to always specify the timezone offset in/^[+-][0-2]\d:[0-5]\d$/
format.Get timezone offset string from timezone offset number
Now, if you want to get an offset in that format from
(new Date()).getTimezoneOffset()
(e.g.-120
), you need toGet timezone offset string from IANA timezone
我意识到这是一篇旧文章,但是 momentJS 是一个强大的 JavaScript 库,用于操作日期/时间对象
I realize this is an old post, but momentJS is a powerful javascript library to manipulate date/time objects