Летнее время в Javascript для 1974 года? - PullRequest
11 голосов
/ 19 января 2010

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

Похоже, что в объекте даты Javascript имеется ошибка для этих дат.Если вы конвертируете 127627200000 миллисекунд в дату, это должно быть Чт 17 января 00:00:00 ПО ВОСТОЧНОМУ ВРЕМЕНИ 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 ]

13 голосов
/ 19 января 2010

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

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

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

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

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


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

0 голосов
/ 19 января 2010

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

...