Javascript 浏览器、时区、Chrome 67错误(历史时区更改)
我已经把Chrome升级到67版。我得到了一个日期错误 ============== Microsoft Edge 42.17134.1.0Javascript 浏览器、时区、Chrome 67错误(历史时区更改),javascript,date,datetime,browser,Javascript,Date,Datetime,Browser,我已经把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 new Date("1900-01-01T00:00:00").getTimezoneOffset() -180
new Date("1900-01-01T00:00:00").getTimezoneOffset()
-180
new Date("2018-05-30T00:00:00").getTimezoneOffset()
-180
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
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
铬合金67.0.3396.62
new Date("1900-01-01T00:00:00").getTimezoneOffset()
-150
new Date("2018-05-30T00:00:00").getTimezoneOffset()
-180
======================
-150铬合金67…
另一个例子(Chrome 67):
new Date("1900-01-01T00:00:00");
Mon Jan 01 1900 00:00:00 GMT+0230 (Moscow Standard Time)
======================
Chrome 67的时区开始不正确(+0230,was:+0300)
请告诉我
我能做什么
形势非常重要!我必须重写的所有代码
======================我假设您在欧洲/莫斯科时区-考虑到您提供的输出,这似乎很可能 1900年,欧洲/莫斯科时区的偏移量为+02:30:17。据推测,Chrome将四舍五入到02:30以避免亚分钟偏移,但据我所知,它将返回适当的数据。至少根据IANA数据库,俄罗斯的偏移量在1919年首次变成了整小时数 可以说,您应该询问其他浏览器为什么不这样做,但更有可能的是,您应该更改代码,使其在1970年之前不要求提供时区信息。IANA数据库旨在提供Unix时代以后的准确数据;任何更早的事情都是“最大努力”。从: 1970年之前的时钟转换会针对每个这样的位置进行记录,因为大多数系统支持1970年之前的时间戳,如果1970年之前的转换忽略了数据条目,则可能会出现错误行为。然而,该数据库不是为需要准确处理各地所有过去时间的应用程序而设计的,也不足以满足这些应用程序的需要,因为记录1970年以前的民用计时的所有细节需要花费太多的精力和猜测。虽然数据库范围之外的一些信息收集在与数据库一起分发的文件后台区域,但该文件的可靠性较低,不一定遵循数据库指南
如果你在以前的Chrome版本中没有看到Chrome 67,那么你为什么会在Chrome 67中看到这个问题?我想知道Chrome是否刚刚开始捆绑IANA时区数据,而不是使用操作系统数据。我假设你在欧洲/莫斯科时区-考虑到你提供的输出,这似乎很可能 1900年,欧洲/莫斯科时区的偏移量为+02:30:17。据推测,Chrome将四舍五入到02:30以避免亚分钟偏移,但据我所知,它将返回适当的数据。至少根据IANA数据库,俄罗斯的偏移量在1919年首次变成了整小时数 可以说,您应该询问其他浏览器为什么不这样做,但更有可能的是,您应该更改代码,使其在1970年之前不要求提供时区信息。IANA数据库旨在提供Unix时代以后的准确数据;任何更早的事情都是“最大努力”。从: 1970年之前的时钟转换会针对每个这样的位置进行记录,因为大多数系统支持1970年之前的时间戳,如果1970年之前的转换忽略了数据条目,则可能会出现错误行为。然而,该数据库不是为需要准确处理各地所有过去时间的应用程序而设计的,也不足以满足这些应用程序的需要,因为记录1970年以前的民用计时的所有细节需要花费太多的精力和猜测。虽然数据库范围之外的一些信息收集在与数据库一起分发的文件后台区域,但该文件的可靠性较低,不一定遵循数据库指南
如果你在以前的Chrome版本中没有看到Chrome 67,那么你为什么会在Chrome 67中看到这一点?我想知道Chrome是否刚刚开始绑定IANA时区数据,而不是使用操作系统数据。我在使用
新日期(“…”)
时遇到了一些类似的问题;构造器。(也是自Chrome版本更改后)
以下人士的说明:
注意:由于浏览器差异和不一致,强烈建议使用日期构造函数(和date.parse,它们是等效的)解析日期字符串。仅按惯例支持RFC 2822格式字符串。对ISO 8601格式的支持不同之处在于,仅日期字符串(例如“1970-01-01”)被视为UTC,而不是本地字符串
也许在您的代码中可以使用其他日期构造函数,如:
new Date(Date.UTC(96, 1, 2, 3, 4, 5));
我在使用新日期(“…”)时遇到了一些类似的问题;构造器。(也是自Chrome版本更改后) 以下人士的说明: 注意:由于浏览器差异和不一致,强烈建议使用日期构造函数(和date.parse,它们是等效的)解析日期字符串。仅按惯例支持RFC 2822格式字符串。对ISO 8601格式的支持不同之处在于,仅日期字符串(例如“1970-01-01”)被视为UTC,而不是本地字符串 也许在您的代码中可以使用其他日期构造函数,如:
new Date(Date.UTC(96, 1, 2, 3, 4, 5));
如果你想做精确的计算,历史日期、时间和时区是极其复杂的。它们现在仍然有点乱,但比以前简单多了。您不能期望javascript实现包含所有时区和区域的所有日期的所有偏移量(特别是在javascript中,“locale”实际上是一个语言代码,而不是位置时)。如果你想这样做,可以使用一个基于位置(而不是语言)的精确偏移数据库库,比如IANA时区数据库..罗布,谢谢!你能说一些库(javascript)有合适的数据库吗?请求外部资源在这里是离题的。您可以从开始,它是moment.js的扩展,使用IANA时区数据库中的数据。然而,我不知道对历史数据的支持有多远