JavaScript setDate возвращает неправильные даты
Я получаю дату из строки, анализируя ее, чтобы получить составляющие дня, месяца и года и использовать их для экземпляра объекта Date.
То, что я пытаюсь достичь, - увеличить число на один день.
Все работает отлично, за исключением того, что метод setDate настаивает на возвращении мне недействительных дат иногда...
Например, если я добавлю 1 день до 28 февраля 2011 года, он вернет мне 29 февраля 2011 года... дату, которая на самом деле не существует.
Является ли это ошибкой/ограничением родного API Date/Time JavaScript, или я просто делаю что-то неправильно? Мне трудно поверить, что он ведет себя таким образом, не проверяя действительность даты.
var myDate = new Date(2011, 2, 28);
alert(myDate);
myDate.setDate(myDate.getDate() + 1);
alert(myDate); // 29 February 2011 !
Спасибо.
Ответы
Ответ 1
Вы не в феврале - месяце # 2 - МАРТ
JS месяцев основаны на 0
var myDate = new Date(2011, 1, 28); // 28th of Feb
alert(myDate);
myDate.setDate(myDate.getDate() + 1);
alert(myDate); // 1st of March 2011 !
PS: Если у вас есть некоторые проблемы в течение летнего времени, если вы создаете даты с использованием var d = new Date()
и не нормализуетесь в часах, выполняя d.setHours(0,0,0,0)
впоследствии
Ответ 2
Нет, вы используете Март, не так ли? 29 марта.
var myDate = new Date(2011, 1, 28); // 28th of february
Ответ 3
Ты забыл, что он насчитывает месяцы от 0.
var myDate = new Дата (2011, 2, 28);
на самом деле
Пн Мар 28 2011 00:00:00 GMT + 0300 (FLE Daylight Time) {}
Try
var myDate = new Date(2011, 1, 28);
alert(myDate);
myDate.setDate(myDate.getDate() + 1);
alert(myDate); // 1 Mar 2011 !