如何在浏览器端JavaScript中获取时区缩写?
问题描述
我可以通过Intl.DateTimeFormat().resolvedOptions().timeZone获取时区名称,比如我的浏览器返回结果为America/Los_Angeles。请问是否有方法可以获取对应的时区缩写,比如当前的PDT?
解决方案
可以通过Intl.DateTimeFormat的内置配置直接获取时区缩写,无需引入第三方库:
1. 获取当前用户时区的缩写
直接调用以下代码即可:
Intl.DateTimeFormat('en-US', { timeZoneName: 'short' }) .formatToParts() .find(part => part.type === 'timeZoneName') .value
如果你的当前时区处于洛杉矶夏令时阶段,返回结果就是PDT。
2. 指定时区获取对应缩写
如果需要获取固定时区(比如指定America/Los_Angeles,忽略用户本地时区)的缩写,补充timeZone配置即可:
Intl.DateTimeFormat('en-US', { timeZone: 'America/Los_Angeles', timeZoneName: 'short' }) .formatToParts() .find(part => part.type === 'timeZoneName') .value
注意事项
- 时区缩写和时间节点强关联,比如洛杉矶时区冬季返回
PST、夏季返回PDT,上述代码默认返回当前时间对应的时区缩写。 - 如果你需要获取某个特定时间点的时区缩写,给
formatToParts传入对应日期对象即可,示例:
// 获取2024年1月1日洛杉矶对应的时区缩写 const targetDate = new Date('2024-01-01T00:00:00'); Intl.DateTimeFormat('en-US', { timeZone: 'America/Los_Angeles', timeZoneName: 'short' }) .formatToParts(targetDate) .find(part => part.type === 'timeZoneName') .value // 返回结果为PST
- 如果你需要其他语言的时区名称展示,修改第一个参数的locale值即可,比如传入
zh-CN会返回中文格式的时区名称。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

