Добавить дни в объект 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