Возможно, вы захотите проверить 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.Другие браузеры могут или не могут быть одинаковыми.Вот почему лучше не использовать строки (и если вы используете строки, используйте длинные однозначные стандартные форматы временных меток, а не усеченные).