JavaScript setDate возвращает неправильные даты - PullRequest
4 голосов
/ 31 марта 2011

Я получаю дату из строки, анализирую ее, чтобы получить составляющие дня, месяца и года, и использую их для создания экземпляра объекта 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 !

Спасибо.

Ответы [ 3 ]

10 голосов
/ 31 марта 2011

Вы не в феврале - месяц № 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) впоследствии

1 голос
/ 31 марта 2011

Вы забыли, что отсчет месяцев начинается с 0. var myDate = new Date (2011, 2, 28);на самом деле пн 28 марта 2011 00:00:00 GMT + 0300 (FLE Daylight Time) {}

Попробуйте

 var myDate = new Date(2011, 1, 28);
 alert(myDate);
 myDate.setDate(myDate.getDate() + 1);
 alert(myDate); // 1 Mar 2011 !
1 голос
/ 31 марта 2011

Нет, вы используете март, не так ли?29 марта существует.

var myDate = new Date(2011, 1, 28); // 28th of february
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...