我正在开发一个网络工具,目前遇到了一个问题,在一些选项卡上,我得到的是UTC,而不是我正确的时区偏移。
如果我在控制台里放:
(新日期()。getTimezoneOffset()
我在一些选项卡中得到0,在其他选项卡中得到420。即使是加载了完全相同网站的标签。
当我使用getMonth、getDate、getHours等。。。时间也都以UTC为单位。
我不熟悉使用getTimezoneOffset,所以这是我应该期待的行为吗?根据我所读到的,我认为这应该是我电脑上的本地时间,在这个过程中根本没有改变。
Chrome版本71.0.3578.80(官方版本)(64位)
是我做错了什么,还是这真的是我在Chrome中发现的一个bug?我似乎找不到任何类似这种虫子的记录。最接近的是Android特有的。
https://bugs.chromium.org/p/chromium/issues/detail?id=520783
然而,对于这么多的Chrome用户,我似乎不太可能第一个发现这样的bug。我想确定这绝对是一个bug。
以下是一些附加信息:
领航员。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
失败选项卡:
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
时间会正确变化。只有时区是错的。
它似乎与URL有关。例如,以前失败的网站URL如果在新选项卡中打开,将再次失败。
新的标签页似乎没有这个问题,但是一旦我访问了一个“中毒”的URL,那么这个标签页上的时区就会受到影响。
访问一个好的URL似乎可以解决这个问题,但是访问about:blank没有任何区别。
举个例子,如果我打开一个新选项卡,它就可以正常工作。然后我去拜访斯塔克。com(目前中毒)则时区失败。现在我访问stackexchange。com(无毒),时区正常。然后我去拜访斯塔克。它又坏了。现在,我去了大约:空白,它仍然破碎。如果我访问stackexchange。com它又起作用了。然后我参观了一下:空白,时区仍然正确。
它似乎是特定于域名的。例如,每个选项卡都是stackoverflow。Stackcom上的每个问题都被打断了。com有正确的时区。我已经在每个URL上测试了至少7个页面。
它不影响匿名模式。例如,如果我用Ctrl+Shift+N打开一个新窗口,然后访问stackoverflow。com,时区是正确的。但是,如果我打开一个新窗口,通常是Ctrl+N,那么时区仍然会被打破。
刚开始的时候,我在同一个网站上打开了多个标签页,其中一些在工作,一些失败了。如果我记得的话,是最新的标签首先失败了。我可以复制一个工作标签,然后得到另一个具有相同URL的标签。如果我复制了失败的标签,那么我还会得到另一个失败的标签。然而,在匿名模式之外,我不再有任何关于失败URL的工作标签。