2013-08-27 4 views
1

Я создаю новые объекты даты в javascript и вижу некоторые несоответствия в зависимости от того, использую ли параметр dateString значение year/month/day integer.Непоследовательности при создании новых объектов даты

Вот пример:

var dt1 = new Date(1979,3,5); 
var dt2 = new Date('1979-04-05'); 

jsFiddle with example

dt1 присваивается значение: Чт апр 05 1979 00:00:00 GMT-0500 (Центральное летнее время) назначается

dt2 значение: ср. Apr 04 1979 19:00:00 GMT-0500 (центральное летнее время)

Может кто-нибудь объяснить это поведение? Второй пример (dt2) - это формат, в котором Chrome возвращает выбранную дату из элементов ввода [type = date], поэтому я пытаюсь понять это.

+0

Похоже на смещение GMT ​​по мне – Jonathan

+0

Не могли бы вы объяснить, почему вы даже ожидаете, что 'новая дата ('4,5,1979')' будет вести себя каким-либо особым образом? Строка ''4,5,1979'' даже не отформатирована как дата (но не в любом формате, который я признаю). – NPE

+0

Вот что я понял. Это по дизайну? Почему смещение должно использоваться только при использовании параметра dateString? – joshb

ответ

4

Похоже, что форма '1979-04-05' интерпретируется как дата UTC (а затем дата UTC преобразуется в локальное время, когда отображается). Форма new Date(1979,3,5); интерпретируется как локальное время. Вы можете использовать Date.UTC, чтобы заставить UTC время для формы с тремя аргументами (see docs).

Date разбора (и обработка временных зон, в частности), как правило, не одинаковы для всех браузеров, и это лучше, чтобы не зависеть от него - использовать UTC, когда это возможно, или использовать отдельную библиотеку как Date.js или moment.js.

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