Не очень силен в 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() < 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 штатные средства для НОРМАЛЬНОГО манипулирования датой?