Неправильный getTime в Chrome 67 - PullRequest
0 голосов
/ 07 июня 2018

Я обновил Chrome до версии 67.

new Дата (1924,4,1,0,0,0,0) .getTime ()

return -1441245724000

must -1441249200000

если миллисекунда (1000), секунда (60), минута (60) === 0 getTime должно давать в конце минимум 5 нулей

1 Ответ

0 голосов
/ 08 июня 2018

Объяснение может быть только одно: Вы в Украине.

Позвольте мне объяснить:

  • При передаче отдельных компонентов в конструктор Date эти значения основаны на часовом поясе компьютера, на котором выполняется код.Помня, что месяцы начинаются с нуля, new Date(1924,4,1,0,0,0,0) запрашивает 1924-05-01 00:00:00.000 местное время .

  • .getTime() запрашивает метку времени Unix в миллисекундах, которые основаны на UTC - поэтому существует неявное преобразование из местного времени в UTC.Поэтому любой, кто запускает этот код, получит разные результаты в зависимости от своего часового пояса.

  • Часовые пояса - относительно современное изобретение.Они не всегда существовали так, как мы их используем сегодня.Данные, которые большинство компьютеров хранят о часовых поясах, поступают из базы данных часовых поясов IANA .В этих данных для большинства часовых поясов самая ранняя запись основана на солнечном местном среднем времени (LMT) для широты и долготы, связанной с городом, используемым для определения часового пояса.

  • В этом случае ваше значение -1441245724000 преобразуется в 1924-04-30 21:57:56 UTC.Так как он был получен из местного времени полуночи, то по математике - смещение от UTC в этом местном времени должно было быть +02:02:04.

  • Единственный часовой пояс в TZDB сзначение LMT +02:02:04 равно Europe/Kiev, , как показано здесь .По причинам, в которых я точно не уверен, TZDB также присваивает аббревиатуру KMT (Киевское среднее время) с 1880 по 1924 год.

Относительно того, почему вы видите это на более новыхверсии Chrome - вероятно, что более старые версии не принимали во внимание весь TZDB, но урезали его в некоторый момент в прошлом.Действительно, стандарт ECMAScript 5.1, используемый для того, чтобы требовать применения только правила текущего часового пояса, должен был применяться так, как если бы он действовал на все времена.Это было удалено в ECMAScript 6, и большинство браузеров теперь используют правильное правило, которое действовало для предоставленной метки времени.

TL; DR : местное время в Украинедо 1 мая 1924 года было определено солнце, а не правительство.По крайней мере, это самая известная информация, которую имеет ваш компьютер.

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