Chrome:时区偏移量每个选项卡都不同?

azo*_*ria 5 javascript console timezone google-chrome timezone-offset

我正在开发一个网络工具,目前遇到一个问题,在某些选项卡上,我得到的是 UTC 而不是正确的时区偏移量。

即如果我放入控制台:

(new Date()).getTimezoneOffset()

我在某些选项卡中得到 0,在其他选项卡中得到 420 的值。甚至加载了完全相同网站的选项卡。

当我使用 getMonth、getDate、getHours 等时......时间也都是 UTC 格式。

我刚开始使用 getTimezoneOffset,那么这种行为是我应该期待的吗?根据我正在阅读的内容,我认为这应该是我电脑上的当地时间,在此过程中根本没有改变。

Chrome 版本 71.0.3578.80(官方版本)(64 位)

是我做错了什么还是这确实是我在 Chrome 中发现的错误?我似乎找不到任何此类错误的记录。最接近的是 Android 专用的。https://bugs.chromium.org/p/chromium/issues/detail?id=520783

然而,在 Chrome 用户众多的情况下,我似乎不太可能是第一个发现此类错误的人。我想确定这绝对是一个错误。

以下是一些附加信息:

navigator.userAgent = Mozilla/5.0(Windows NT 6.1;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/71.0.3578.80 Safari/537.36

工作选项卡:

Intl.DateTimeFormat().resolvedOptions().timeZone = undefined
new Date().toString() = "Mon Dec 24 2018 16:09:55 GMT-0700 (GMT-07:00)"
(new Date()).getTimezoneOffset() = 420
(new Date()).getHours() = 16
Run Code Online (Sandbox Code Playgroud)

失败的选项卡:

Intl.DateTimeFormat().resolvedOptions().timeZone = "Etc/Unknown"
new Date().toString() = "Mon Dec 24 2018 23:09:44 GMT+0000 (GMT)"
(new Date()).getTimezoneOffset() = 0
(new Date()).getHours() = 23
Run Code Online (Sandbox Code Playgroud)

时间更改正确。只是时区不对。

它似乎与 URL 相关。例如,如果在新选项卡中打开,之前失败的网站 URL 将再次失败。

新选项卡似乎没有问题,但是一旦我访问“中毒”的 URL,该选项卡上的时区就会受到影响。

访问一个好的 URL 似乎可以解决问题,但是访问 about:blank 没有什么区别。

举个例子,如果我打开一个新选项卡,它就可以正常工作。然后我访问 stackoverflow.com (目前已中毒),然后时区出现故障。现在我访问stackexchange.com(未中毒),时区很好。然后我访问 stackoverflow.com,它又坏了。现在,我转到 about:blank,它仍然损坏。如果我访问 stackexchange.com 它会再次工作。然后我访问about:blank,时区仍然正确。

它似乎是特定于域名的。例如,stackoverflow.com 上的每个选项卡都已损坏,而 stackexchange.com 上的每个问题都有正确的时区。我在每个 URL 上测试了至少 7 个页面。

它不影响隐身模式。例如,如果我使用 Ctrl + Shift + N 打开一个新窗口,然后访问 stackoverflow.com,则时区是正确的。但是,如果我正常打开一个新窗口 Ctrl + N,那么时区仍然会被破坏。

当我第一次开始时,我打开了同一个站点的多个选项卡,其中一些可以正常工作,而另一些则失败。如果我没记错的话,首先失败的是最新的选项卡。我可以复制一个工作选项卡并获取具有相同 URL 的另一个选项卡。如果我复制了失败的选项卡,那么我还会得到另一个失败的选项卡。但是,在隐身模式之外,我不再有任何有关失败 URL 的工作选项卡。