javascript - 更改电脑时区后,Chrome 无法正确获取时区名称

标签 javascript html google-chrome date timezone

我在 javascript 中有一段代码,如下所示:

$(document).ready(function () {    
    var day1 = new Date();
});

现在我打开浏览器(在本例中我使用 FireFox),我计算机的当前时区是 UTC +10:00 Hobart。然后我在 Debug模式下查看 day1 javascript 变量,它显示其值如下图所示。 enter image description here

UTC+10:00 霍巴特 的时区名称是塔斯马尼亚标准时间。 FF 获得了正确的名称,这也符合我的预期。

接下来,我将在打开 FF 浏览器 的同时将计算机上的时区更改为 UTC+10:00 Canberra, Melbourne, Sydney。然后我按 Ctrl+F5 刷新 FF 浏览器并再次在 Debug模式下查看 day1 的值。

enter image description here

如您所见,FF 将新的正确时区名称更新为澳大利亚东部标准时间。它也按我的预期工作。

MS Edge 和 IE 与 FF 的工作方式相同。

但是,Chrome 的工作方式不同。

enter image description here

Chrome 返回给我的新时区名称是本地夏令时,而不是我预期的澳大利亚东部标准时间和其他浏览器(FF、MS Edge、IE)所做的那样。

为什么 Chrome 不返回“AUS Eastern Standard Time”名称?

Chrome 有什么办法可以解决这个问题吗?

最佳答案

不幸的是,时区名称的实现并不标准化。 ECMAScript 规范允许它成为 vendor 想要的任何东西。它甚至不仅在浏览器之间不同,而且在浏览器的不同版本和操作系统之间也不同。

From ECMA-262 (5.1) Section 15.9.5.2 (emphasis mine)

Date.prototype.toString()

This function returns a String value. The contents of the String are implementation-dependent, but are intended to represent the Date in the current time zone in a convenient, human-readable form.

如果您要做的是检测用户的时区,则有一个更新的标准用于检索时区名称,作为 IANA 时区标识符(例如,Australia/Sydney ),你可以这样做:

Intl.DateTimeFormat().resolvedOptions().timeZone

然而,并不是所有的浏览器都实现了这一点。虽然有些图书馆可以猜测它,which you can read about here .

关于javascript - 更改电脑时区后,Chrome 无法正确获取时区名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39871076/

相关文章:

javascript - Video 100%父元素宽度,自动高度(16 :9)

javascript - 检查 Phonegap 应用程序连接

html - 列出与字体和 "content:'\value' 一起使用的图标/字形

javascript - 从textarea到div的文本具有有限的宽度和高度

google-chrome - 如何禁用 Google Chrome 的未请求连接?

javascript - 将不同的 PHP 变量传递给模态并在表单输入中显示

javascript - 如何检测 Android 浏览器上键盘显示/隐藏事件的发生

javascript - 如何在 div 中滑动或动画化多个元素?

html - 带溢出的 IFRAME :hidden still shows scrollbars in Chrome

javascript - 在 Chrome 中的 iframe 沙箱内绑定(bind) javascript 事件