Летнее и зимнее время в Javascript для 1974 года?
"в годы "энергетического кризиса" конгресс принял более ранние даты начала работы в летнее время. В 1974 году дневное время началось 6 января, а в 1975 году-23 февраля. После этих двух лет дата начала вернулась к последнему воскресенью апреля. "
(via 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 (Восточное стандартное время). Если вы создаете новый объект Date(127627200000) в javascript, он дает последнее преобразование даты. Это происходит во всех основных браузерах.
Я не могу себе представить, что это первый время это было проблемой для всех, но я не могу найти никаких других случаев этой проблемы с несколькими поисками в интернете. Кто-нибудь знает, есть ли существующее исправление для этого или более простое исправление, чем ручная проверка дат Javascript имеет неправильное преобразование? Есть ли другие даты, это проблема?
2 ответов
Как всегда, лучше всего проверить спецификацию:)
в этом случае я был довольно шокирован, увидев это в разделе 15.9.1.9 ECMA-262:
реализация ECMAScript не следует пытаться определить, точное время зависело от дневного света экономия времени, но только ли дневной свет экономия времени была бы в силе если текущее летнее время в то время использовался алгоритм. Это позволяет избежать таких осложнений, как принимая во внимание годы, которые локаль наблюдается летнее время круглый год.
другими словами, соответствующей реализацией ECMAScript является не допускается чтобы быть исторически точным.
теперь, все ли реализации следуют этому или нет, я не уверен... но это предполагает, что вам понадобится какая-то отдельная библиотека, Если вы хотите получить исторически точные часовые пояса... где "исторически точная" не должна быть почти такой же конечно, еще в 1974 году: США изменили свой график DST в 2007 году, а другие страны сделали это совсем недавно (и с меньшим предупреждением).
1 первое появление 15.9.1.9. По какой - то причине это происходит дважды-один раз для "настройки летнего времени" и один раз для "местного времени". Круто.