Браузеры, часовые пояса, ошибка Chrome 67 (исторические изменения часового пояса) - PullRequest
0 голосов
/ 30 мая 2018

Я обновил 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

============================

-150 в Chrome 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, было: +0300)

Скажите, пожалуйста?

Что я могу сделать?

Ситуация очень важная!Весь код я должен переписать ...

======================

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

У меня были похожие проблемы при использовании new Date("..");конструктор.(также после изменения версии Chrome)

Примечание от MDN Date Reference :

Примечание: анализ строк даты с помощью конструктора Date (и Date.синтаксический анализ, они эквивалентны) настоятельно не рекомендуется из-за различий и несоответствий браузера.Поддержка строк формата RFC 2822 предоставляется только по соглашению.Поддержка форматов ISO 8601 отличается тем, что строки, содержащие только дату (например, «1970-01-01»), обрабатываются как UTC, а не как локальные.

Возможно, в вашем коде возможно использовать другиеДата создания, например:

 new Date(Date.UTC(96, 1, 2, 3, 4, 5));
0 голосов
/ 30 мая 2018

Я собираюсь предположить, что вы находитесь в часовом поясе Европа / Москва - это, вероятно, вероятно с учетом предоставленного вами результата.

В 1900 году часовой пояс Европа / Москва имел смещение+02: 30: 17, в соответствии с базой данных часовых поясов IANA .Предположительно, Chrome округляется до 02:30, чтобы избежать смещений менее минуты, но, насколько я вижу, он возвращает соответствующие данные.Офсет в России впервые стал целым числом часов в 1919 году, по крайней мере, согласно базе данных IANA.

Возможно, вы должны спросить, почему другие браузеры не делают этого - но большескорее всего, вам следует изменить свой код, чтобы не запрашивать информацию о часовом поясе до 1970 года. База данных IANA направлена ​​на предоставление точных данных начиная с эпохи Unix;все, что раньше, - это "лучшее усилие".Из теоретического файла :

Тактовые переходы до 1970 г. записываются для каждого такого местоположения, поскольку большинство систем поддерживают временные метки до 1970 г. и могут неправильно работать, если записи данных были опущены до 1970 г.переходы.Тем не менее, база данных не предназначена и не подходит для приложений, требующих точной обработки всех прошлых времен везде, так как для записи всех деталей гражданского хронометража до 1970 года потребовалось бы слишком много усилий и догадок.Хотя некоторая информация, выходящая за рамки базы данных, собирается в задней зоне файла, которая распространяется вместе с самой базой данных, этот файл менее надежен и не обязательно соответствует рекомендациям базы данных.

С точки зрения причинвы видите это с Chrome 67, если вы не видели его с предыдущими версиями Chrome - мне интересно, только начал ли Chrome связывать данные часового пояса IANA вместо использования данных ОС.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...