我可以用什么方法在所有浏览器中获取时区缩写
what method can I use to get the timezone abbreviation in all browsers?
在Chrome、Safari和Firefox中,我使用这样的调用:
var date = new Date();
date.toTimeString().match(/'((.*)')/)
但这在IE 9中不起作用,因为IE 9返回的数据没有括号。这在IE 11中不起作用,因为IE 11不返回缩写,而是返回类似(太平洋标准时间)的内容。
示例IE9-IE10输出:
"15:38:43 PST"
示例IE11和边缘输出:
"15:36:07 GMT-0800 (Pacific Standard Time)"
一些背景:
- 时区名称及其缩写尚未正式标准化,尽管有许多方案已被广泛采用,可能被视为事实上的标准(例如IANA时区数据库)
- 浏览器在国际化方面是出了名的糟糕,例如IE和Chrome将澳大利亚东部的时间报告为"东澳大利亚标准时间",而更广泛的说法是"澳大利亚东部标准时间"
- 一些时区方案没有针对每个时区的唯一标识符,例如EST可能适用于3个不同的区域
- toTimeString返回的值完全依赖于实现,因此它可能根本不包含任何时区信息,即使包含,也可能不是用户所期望的(请参阅上文)
有各种库可以根据Date.protype.getTimezoneOffset返回的时区偏移量确定可能的时区,并测试两个日期以查看是否使用夏令时(例如jsTimezoneDetect),但大多数库都基于IANA时区数据库。
因此,重新表述您的问题:
有没有可靠的方法来获取主机时区缩写
答案是否定的。
然而,如果您准备接受派生的IANA时区名称,并将其映射到您希望使用的任何其他方案,那么使用库将相当接近。
MomentJS时区:
moment.tz([2012, 0], 'America/New_York').format('z'); // EST
moment.tz([2012, 5], 'America/New_York').format('z'); // EDT
moment.tz([2012, 0], 'America/Los_Angeles').format('z'); // PST
moment.tz([2012, 5], 'America/Los_Angeles').format('z'); // PDT
尝试
Intl.DateTimeFormat().resolvedOptions().timeZone
Waring:它与所有浏览器版本不兼容
相关文章:
- 是否可以使用javascript从浏览器获取访问的上一页的URL
- 如何使用Google Places Javascript API搜索附近的位置(自动从浏览器获取坐标)
- 让浏览器获取源代码并重新编译脚本以进行实时编辑
- 跨浏览器获取密钥代码
- 通过javascript从浏览器获取奥尔森时区ID信息
- 从浏览器获取制表键
- 在 node.js 上使用 socket.on 方法从浏览器获取数据
- 在本机浏览器获取中设置授权
- Web浏览器获取css和javascript文件
- 在编写量角器spec.js文件的测试用例中从浏览器获取会话值
- Android浏览器:获取视口大小
- 如何使用无头浏览器获取特定的get请求
- 跨浏览器-获取CSS颜色
- 从浏览器获取客户端时区
- 真正跨浏览器获取文档高度的方法
- 从node.js到浏览器获取大查询结果
- 从web浏览器获取位置
- 如何从浏览器获取TimeZoneID
- 从浏览器获取上传文件夹和文件名
- 如何使用javascript从浏览器获取当前光标样式