Добавить дни в объект Date Javascript, а также увеличить месяц

Оглядываясь на предыдущие вопросы и ответы, оказалось, что это должно работать:

var palindrome = new Date('2011-11-11');
var december = new Date('2011-11-11');

december.setDate(palindrome.getDate()+20); 
//should be december, but in fact loops back over to Nov 1st)

my jsFiddle

Есть ли простой способ гарантировать, что месяцы будут увеличиваться правильно, или я пропустил что-то очевидное?

Ответ 1

Вызов getMonth() возвращает значение от 0 до 11, где 0 - январь, а 11 - декабрь, поэтому 10 означает ноябрь. Вам нужно увеличить значение на 1 при использовании в строке. Если вы просто выведете его как строку, вы увидите, что она имеет правильную дату. Примечание. Мне также пришлось изменить формат даты начала. Кажется, это не похоже на 2011-11-11, поэтому я сделал это 11/11/2011. http://jsfiddle.net/9HLSW/

Ответ 2

Вы можете сделать это следующим образом:

var dayOffset = 20;
var millisecondOffset = dayOffset * 24 * 60 * 60 * 1000;
december.setTime(december.getTime() + millisecondOffset); 

Ответ 3

Ваш код верен, однако вы неправильно его преобразуете в строку.

getMonth() начинается с 0 в январе и заканчивается 11 в декабре. Итак, все, что вам нужно сделать, это добавить 1 к месяцу следующим образом:

alert(endDate.getFullYear() + "-" + (endDate.getMonth()+1) +"-"+ endDate.getDate());   

Обратите внимание на дополнительные скобки - поскольку вы выполняете математическую операцию при конкатенации строк. В качестве месяца вы не захотите " 101".

Чтобы узнать, правильно ли указана дата, используйте endDate.toDateString(), чтобы отобразить дату с полным именем (т.е.: январь - декабрь).

alert(endDate.toDateString());

Подробнее о объекте Date см. этот раздел в w3schools