Дневное время сэкономить время в JavaScript за 1974 год?

StackOverflow https://stackoverflow.com/questions/2096368

  •  21-09-2019
  •  | 
  •  

Вопрос

«В годы« энергетического кризиса »Конгресс принял ранее начальные даты дневного времени. В 1974 году время дневного света началось 6 января, а в 1975 году он начался 23 февраля. После этих двух лет стартовая дата вернулась в последнее воскресенье в Апреля. "
(с помощью http://aa.usno.navy.mil/faq/docs/daylight_time.php )

Похоже, в объекте даты JavaScript для этих дат. Если вы конвертируете 127627200000 миллисекунд в дату, это должно быть 17 января 00:00:00 Edt 1974. Это правильно на http://www.fileformat.info/tip/java/date2millis.htm, но неверно наhttp://www.esqsoft.com/javascript_examples/date-to-epoch.htm, в котором говорится, что он обращается в среду 16 января 1974 г. 23:00:00 GMT-0500 (восточное стандартное время). Если вы создаете новый объект даты (127627200000) в JavaScript, он дает последнюю конверсию даты. Это происходит во всех основных браузерах.

Я не могу представить, что это впервые, это была проблема для всех, но я не могу найти никаких других случаев этой проблемы с несколькими поисками в Интернете. Кто -нибудь знает, существует ли существующее исправление для этого или более легкое исправление, чем вручную проверку дат JavaScript, преобразование неправильно? Есть ли другие даты, это проблема?

Это было полезно?

Решение

Как всегда, лучше проверить спецификацию :)

В этом случае я был довольно шокирован, увидев это в разделе 15.9.1.9 ECMA-262:

Реализация Ecmascript не должна пытаться определить, подлежит ли точное время дневное время сэкономить, но в то время использовалось только время экономии летнего света, если бы в то время использовался текущий алгоритм времени экономии дневного света. Это позволяет избежать осложнений, таких как с учетом годов, которые локали наблюдали за дневным временем в круглый год.

Другими словами, соответствующая реализация Ecmascript не допускается быть исторически точным.

Теперь, независимо от того, следуют ли все реализации по этому или нет, я не уверен ... но это предполагает, что вам понадобится какая -то отдельная библиотека, если вы хотите получить исторически точные часовые пояса ... где «исторически точно» не Конечно, должны быть почти до 1974 года: США изменили свой график DST в 2007 году, а другие страны сделали это в последнее время (и с меньшим предупреждением).


1 Первое явление 15.9.1.9. По какой -то причине это происходит дважды - один раз за «Регулирование времени сэкономить время» и один раз для «местного времени». Ух ты.

Другие советы

Java делает исторические часовые пояса (обратно к 1920 году), JavaScript, очевидно, нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top