Прибавление целого числа месяцев к дате на JS?

Не очень силен в JS, а задачу требуется решить именно средствами JS. Собственно задача:


На входе есть дата к примеру в формате дд.мм.гггг и целое количество полных месяцев, которые необходимо прибавить.


Алгоритм следующий:

Дата = Дата + N месяцев — 1 день;


Пример:

На входе 1 января, прибавляем 1 месяцев, на выходе 31 января

На входе 1 января, прибавляем 2 месяца, на выходе 28(невысокосный) или 29(высокосный) февраля


Немного поискав, наткнулся на класс Date, расширил его согласно манулу:

Date.prototype.addMonths= function(m) {<br/>
 var d = this.getDate();<br/>
 this.setMonth( this.getMonth() + m );<br/>
<br/>
if (this.getDate() &lt; d )<br/>
 this.setDate( 0 );<br/>
<br/>
this.setDate( this.getDate()-1 );<br/>
<br/>
};



В основном результат правильный, но есть и глюки, например:

задаю 1 августа сего года + 1 месяц = 30 августа

задаю 31 августа сего года + 1 месяц = 31 сентября!!!


код примера

var beginDate = '01.08.2011';<br/>
 var months = 1;<br/>
<br/>
var dateArr = beginDate.split( '.' );<br/>
 var d = dateArr[0] * 1;<br/>
 var m = dateArr[1] * 1;<br/>
 var y = dateArr[2] * 1;<br/>
<br/>
var newDate = new Date(y, m, d);<br/>
 newDate.addMonths( months );<br/>
<br/>
alert( newDate.getDate() + '.' + newDate.getMonth() + '.' + newDate.getFullYear() );<br/>


Пример в онлайн-песочнице

Вопрос: Существуют в JS штатные средства для НОРМАЛЬНОГО манипулирования датой?
  • Вопрос задан
  • 8642 просмотра
Решения вопроса 1
mark_ablov
@mark_ablov
var date = new Date('08/31/2011');
var N = 1;
date.setMonth(date.getMonth() + N);
date.setDate(0);
alert(date);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
printf
@printf
Ем детей.
Обычно использую для таких штук datejs.

Date.today().add(1).months();
// или даже так
var n = 1;
n.months().fromNow();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы