【发布时间】:2019-07-11 10:20:02
【问题描述】:
我已将 Chrome 更新到 67 版本。我收到日期错误
==============
Microsoft Edge 42.17134.1.0
new Date("1900-01-01T00:00:00").getTimezoneOffset()
-180
new Date("2018-05-30T00:00:00").getTimezoneOffset()
-180
Microsoft Internet Explorer 11.48.17134.0
new Date("1900-01-01T00:00:00").getTimezoneOffset()
-180
new Date("2018-05-30T00:00:00").getTimezoneOffset()
-180
Mozilla Firefox 60.0.1
new Date("1900-01-01T00:00:00").getTimezoneOffset()
-180
new Date("2018-05-30T00:00:00").getTimezoneOffset()
-180
Chrome 67.0.3396.62
new Date("1900-01-01T00:00:00").getTimezoneOffset()
-150
new Date("2018-05-30T00:00:00").getTimezoneOffset()
-180
=======================
Chrome 67 中为-150...
另一个例子(Chrome 67):
new Date("1900-01-01T00:00:00");
Mon Jan 01 1900 00:00:00 GMT+0230 (Moscow Standard Time)
=======================
在 Chrome 67 中,时区开始不正确(+0230,原为:+0300)
请告诉我?
我能做什么?
情况很重要!我必须重写的所有代码...
=======================
【问题讨论】:
-
如果您想进行准确的计算,历史日期、时间和时区非常复杂。他们今天仍然有点乱,但比以前简单得多。您不能指望 javascript 实现包含所有时区和地区的所有日期的所有偏移量(特别是在 javascript 中“区域设置”实际上是语言代码,而不是位置时)。如果需要,请使用具有基于位置(而不是语言)的准确偏移量的合适数据库的库,例如 IANA 时区数据库。..
-
RobG,谢谢!你能说一些带有合适数据库的库(在 javascript 中)吗?
-
对外部资源的请求不在此处讨论。您可以从 moment timezone 开始,它是 moment.js 的扩展,并使用 IANA 时区数据库中的数据。但是,我不知道对历史数据的支持有多远,也不知道它有多广泛或准确。
-
谢谢!我已经用 momentjs 修改了代码。我遇到了另一个问题。客户已了解时区。 “1900-01-01T00:00:00+02:30”的客户端没有问题,但我对来自服务器“1900-01-01T00:00:00+03:00”的日期有问题。变成 1899 年,减去 30 分钟!我该如何解决?我已经学习了使用 Chrome 67 的客户端,以及客户端如何与其他浏览器一起使用?对不起我的英语!
-
@Alexey:这是一个单独的问题,您需要在一个新问题中提供更多背景信息。 RobG 和我已经解释了为什么您可能会看到不同的偏移量,尤其是很久以前的日期/时间值。这就是这个问题的意义所在。如果您想知道如何最好地处理这个问题,您需要提供有关您正在尝试做什么以及您拥有什么代码的更多信息。
标签: javascript date datetime browser