Атрибут даты DS.Model неправильно анализирует дату (ГГГГ-ММ-ДД)

У меня возникла проблема с датами разбора DS.Model в формате «ГГГГ-ММ-ДД». Они всегда отстают на один день.

Вот пример:

http://jsfiddle.net/ZUV8v/

Используя объекты Date на консоли, я получаю аналогичные результаты.

> new Date('2012-09-20')
Wed Sep 19 2012 17:00:00 GMT-0700 (PDT)

Это ошибка ember, ошибка javascript или ошибка Chrome, или я что-то упустил?

Chrome версии 21.0.1180.89 на OSX 10.7


person Aaron Renoir    schedule 21.09.2012    source источник
comment
Вы все еще можете воспроизвести это со своей скриптой JS? Я получаю следующий результат, и он кажется правильным: date: Thu Sep 20 2012 03:00:00 GMT+0300 (Arabic Standard Time).   -  person s.ermakovich    schedule 21.09.2012
comment
Я считаю, что дата верна для вас из-за часового пояса, в котором вы находитесь. Итак, как сказал @jasolko, Javascript заполняет пропущенные значения нулями, а затем оценивает их на основе текущего часового пояса. В моем случае нахождение в часовом поясе Тихого океана вычитает 7 часов, перемещая дату на предыдущий день.   -  person Aaron Renoir    schedule 25.09.2012


Ответы (1)


Я столкнулся с этим буквально на днях.

Согласно спецификации ECMAScript 15.9.1.15.

Все числа должны быть основаны на 10. Если поля MM или DD отсутствуют, в качестве значения используется "01". Если поля HH, mm или ss отсутствуют, в качестве значения используется «00», а значение отсутствующего поля sss равно «000». Значение смещения отсутствующего часового пояса равно "Z".

new Date('2012-09-20')

такой же как

new Date("2012-09-20T00:00:00.000Z")

Затем консоль выводит значение в вашем местном часовом поясе.

person Jason P    schedule 21.09.2012
comment
хорошо, это имеет смысл. Как вы думаете, ember-data должен анализировать дату по-другому или значение даты json всегда должно включать время и часовой пояс? - person Aaron Renoir; 22.09.2012
comment
Извините, я обычно не заглядываю сюда по выходным. Я думаю, имеет смысл всегда указывать часовой пояс. Я когда-либо пишу только внутренние приложения, которые остаются в одном часовом поясе, и мне никогда не приходилось думать об этом раньше. - person Jason P; 24.09.2012
comment
без проблем. Если это объект даты и времени, я согласен, но, похоже, нет хорошего способа делать только объекты даты в javascript. Я начал новый вопрос о сериализации. stackoverflow.com/questions/12538242/serialize-date-attributes . Спасибо за помощь. - person Aaron Renoir; 25.09.2012