Возможно, вы захотите проверить https://stackoverflow.com/a/163584/436641 на некоторые оговорки о создании объектов Date в JavaScript с использованием строк. В двух словах, для надежности, вы должны делать это:
new Date(2011, 11, 13);
(Обратите внимание, что второй параметр, месяц, составляет 0 за январь 11 за декабрь, а не 1-го по 12)
В ваш конкретный случай, когда вы создаете экземпляр с помощью "2011-12-13"
, он использует GMT, а затем настраивается на ваш часовой пояс, который в вашем случае на восемь часов меньше GMT. Таким образом, вы получаете 4 часа дня за день до того, как задаетесь вопросом. Так что это понедельник, а не вторник. (См. Результат, где говорится, что время 16:00:00, а дата 12-го, а не 13-го?)
Когда вы создаете экземпляр с "12/13/2011"
, вы получаете полночь на 13-м месте в своем местном часовом поясе. Итак, вы получаете вторник, в тот день, когда вы просили.
Разница (возможно) объясняется тем, что Date
будет передать строку в статическое parse()
метод, который (возможно) обработка одного из этих строк в качестве ISO 8601 метки времени, а другой в качестве RFC-822 метки времени, и что значения по умолчанию/наилучшие догадки для часовых поясов для этих временных меток отличаются. См. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse для ситуации с Firefox. Другие браузеры могут быть или не совпадать. Поэтому лучше не использовать строки (и если вы используете строки, используйте длинные однозначные стандартные временные метки, а не усеченные).
Я добавил вероятную причину в качестве последнего абзаца к моему ответу. В принципе, 'Date.parse()' должен угадывать, что предполагается, когда он получает усеченную строку timestamp, поэтому он делает предположение относительно того, что, по его мнению, вероятно, предназначен для часовой пояс. – Trott
Стоит отметить, что если вы добавите в строку '00: 00: 00', вы получите результаты, которые вы ищете. В моем случае проще просто разбираться со строкой, а не разбирать детали даты (и вычитать 1 за месяц). –