Есть несколько сумасшедших вещей, которые происходят с объектом JS DATE , который преобразует строки, например, рассмотрим следующую дату, которую вы указали
Примечание: Следующие примеры могут быть или не быть ONE DAY OFF в зависимости от ВАШ часовой пояс и текущее время.
new Date("2011-09-24"); // Year-Month-Day
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.
Однако, если мы изменим формат строки на Месяц-День-Год ...
new Date("09-24-2011");
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
Еще один странный
new Date("2011-09-24");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF AS BEFORE.
new Date("2011/09/24"); // change from "-" to "/".
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
Мы можем легко изменить дефис в вашей дате "2011-09-24" при создании новой даты
new Date("2011-09-24".replace(/-/g, '\/')); // => "2011/09/24".
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
Чтоесли бы у нас была строка даты, например "2011-09-24T00: 00: 00"
new Date("2011-09-24T00:00:00");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.
Теперь измените дефис на косая черта как и раньше;что происходит?
new Date("2011/09/24T00:00:00");
// => Invalid Date
Мне обычно приходится управлять форматом даты 2011-09-24T00: 00: 00 , поэтому я так и делаю.
new Date("2011-09-24T00:00:00".replace(/-/g, '\/').replace(/T.+/, ''));
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
ОБНОВЛЕНИЕ
Если вы предоставите отдельные аргументы конструктору Date, вы можете получить другие полезные выходные данные, как описано ниже
Примечание: аргументы могут быть типа Number или String.Я покажу примеры со смешанными значениями.
Получите первый месяц и день данного года
new Date(2011, 0); // Normal behavior as months in this case are zero based.
=> // Sat Jan 01 2011 00:00:00 GMT-0700 (MST)
Получите последний месяц и деньгод
new Date((2011 + 1), 0, 0); // The second zero roles back one day into the previous month's last day.
=> // Sat Dec 31 2011 00:00:00 GMT-0700 (MST)
Пример числа, строковые аргументы.Обратите внимание, что месяцем является март, потому что месяцы снова начинаются с нуля.
new Date(2011, "02");
=> // Tue Mar 01 2011 00:00:00 GMT-0700 (MST)
Если мы сделаем то же самое, но с нулевым днем, мы получим что-то другое.
new Date(2011, "02", 0); // again the zero roles back from March to the last day of February.
=> // Mon Feb 28 2011 00:00:00 GMT-0700 (MST)
При добавлении нулевого дня к любому аргументу год и месяц будет получен последний день предыдущего месяца.Если вы продолжите с отрицательными числами, вы можете продолжить откат на другой день
new Date(2011, "02", -1);
=> // Sun Feb 27 2011 00:00:00 GMT-0700 (MST)