2014-02-03 2 views
3

У меня проблемы с датами и часовыми поясами, интересно, почему эти два разных запроса дают разные результаты. Редко, как это также изменяет часовые пояса в зависимости от года, которое я пытаюсь отправить. Я использую Firefox 26.0 над UbuntuНеправильное поведение с датами в Javascript

Запрос:

new Date("1990-04-12T00:00:00-03:00") 

Результат:

Date {Wed Apr 11 1990 23:00:00 GMT-0400 (WART)} 

Запрос:

new Date("1983-04-12T00:00:00-03:00") 

Результат:

Date {Tue Apr 12 1983 00:00:00 GMT-0300 (ART)} 

Любая подсказка?

+1

Временные интервалы со временем меняются. Может быть, вы в 2001 году были в другом часовом поясе? Согласно [Википедии] (http://en.wikipedia.org/wiki/Time_in_Argentina), «Аргентина определяет, следует ли следить за летним временем по годам, а отдельные провинции могут отказаться от федерального решения В настоящее время Аргентина не соблюдает летнее время. * «А также» * Первая официальная стандартизация состоялась 25 сентября 1894 года * « –

+0

datetime is hard. http://www.youtube.com/watch?v = -5wpm-gesOY –

+0

, поскольку разница составляет один час, это может быть связано с настройками летнего времени. проверить, когда это было реализовано в Аргентине – Vickel

ответ

1

JavaScript, реализующий ECMAScript 5.1 или ранее (это почти везде), зависит от ошибочной спецификации. В принципе, даже если ваш компьютер знает, какова была правильная настройка часового пояса на указанную вами дату, JavaScript проигнорирует это и будет использовать то, что должно быть , текущие правила предназначены для вашего собственного местного часового пояса. Неважно, проходите ли вы в 1983, 1990 или любом другом предыдущем году, он будет использовать правила, действующие прямо сейчас.

Это подробно обсуждается here, и я сообщил об этом here.

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

Редактировать

Копаем дальше, я собираюсь предположить, что вы находитесь в Западной Аргентине, возможно, с использованием America/Argentina/San_Luis зоны или один поблизости. У этих переключателей зоны были некоторые изменения в 1990 году, когда стандартное смещение началось в UTC-2, затем переключилось на смещение дневного света UTC-4, а затем обратно на новое стандартное смещение UTC-3. Похоже, что Западная Аргентина решила перебросить лишний час из остальной части Аргентины. You can see these changes here.

Интересная часть для меня заключается в том, что ваш браузер взял на себя эти исторические изменения, поскольку, как представляется, Западная Аргентина была зафиксирована на UTC-3 с октября 2009 года. Казалось бы, ваш браузер правильно идентифицирует исторические изменения, которые идет вразрез с тем, что я упоминал выше.

Возможно, что FireFox на Ubuntu теперь соответствует рекомендациям ES6. Я должен это проверить. (Это не последний раз, когда я проверил.)

Есть еще несколько сведений о истории часовых поясов Западной Аргентины here и here.

Смежные вопросы