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 !