【问题标题】:Chrome cannot get TimeZone name correctly after changing the TimeZone of computer更改计算机时区后 Chrome 无法正确获取时区名称
【发布时间】:2017-02-13 17:28:15
【问题描述】:

我在javascript中有一个sn-p代码,如下所示:

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

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

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

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

如您所见,FF 将新的正确时区名称更新为 AUS Eastern Standard Time。它也符合我的预期。

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

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

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

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

有什么办法可以解决 Chrome 的这种情况吗?

【问题讨论】:

    标签: javascript html google-chrome date timezone


    【解决方案1】:

    很遗憾,时区名称的实现不规范。 ECMAScript 规范允许它成为供应商想要的任何东西。它不仅在浏览器之间有所不同,而且在不同版本的浏览器和操作系统之间也有所不同。

    来自ECMA-262 (5.1) Section 15.9.5.2(强调我的)

    Date.prototype.toString()

    此函数返回一个字符串值。 字符串的内容取决于实现,但旨在以方便、人类可读的形式表示当前时区中的日期。

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

    Intl.DateTimeFormat().resolvedOptions().timeZone
    

    然而,并不是所有的浏览器都实现了这一点。不过有些库可以猜到,which you can read about here。

    【讨论】:

    • 感谢您的信息,马特。我想我应该直接联系 Chrome 开发人员并与他们讨论这个问题以找到解决方案或解决方案。我的客户现在遇到了这个问题,你知道,他们更喜欢使用 Chrome 而不是其他浏览器。所以我必须修复它。 =))
    • @PhucNguyen — 当 Matt 说“时区名称的实现不规范”时,他的意思是无处不在,而不仅仅是 ECMAScript。尽管有 de facto 标准,例如 IANA 和 military 指示符,但有各种命名方案,但没有标准。
    • @RobG:非常感谢您的详细解释。 :D。我联系了 Chrome 开发人员,他们现在正在审查我的问题。他们会在以后给我反馈问题​​是否是错误。顺便说一句,我认为应该有一个解决方法来获得我预期的时区名称,正如帖子所说:stackoverflow.com/questions/18246547/get-name-of-time-zone/…
    猜你喜欢
    • 1970-01-01
    • 2013-04-19
    • 2012-01-16
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 2015-10-14
    • 1970-01-01
    相关资源
    最近更新 更多