Como adicionar meses a uma data em JavaScript?

Eu quero adicionar meses a uma data em JavaScript.

Por exemplo: estou inserindo data 06/01/2011 (formato mm/dd/yyyy ) e agora quero adicionar 8 meses a essa data. Eu quero que o resultado seja 02/01/2012 .

Então, ao adicionar meses, o ano também pode aumentar.

A partir daqui :

 var jan312009 = new Date(2009, 0, 31); var eightMonthsFromJan312009 = jan312009.setMonth(jan312009.getMonth()+8); 

Divida sua data em componentes do ano, mês e dia e use Data :

 var d = new Date(year, month, day); d.setMonth(d.getMonth() + 8); 

Data vai cuidar de consertar o ano.

Eu dei uma olhada na data e limpei o código necessário para adicionar meses a uma data lidando com casos extremos (ano bissexto, meses mais curtos, etc):

 Date.isLeapYear = function (year) { return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)); }; Date.getDaysInMonth = function (year, month) { return [31, (Date.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]; }; Date.prototype.isLeapYear = function () { return Date.isLeapYear(this.getFullYear()); }; Date.prototype.getDaysInMonth = function () { return Date.getDaysInMonth(this.getFullYear(), this.getMonth()); }; Date.prototype.addMonths = function (value) { var n = this.getDate(); this.setDate(1); this.setMonth(this.getMonth() + value); this.setDate(Math.min(n, this.getDaysInMonth())); return this; }; 

Isso adicionará a function “addMonths ()” a qualquer object de data do javascript que deve manipular casos de borda. Graças a Coolite Inc!

Usar:

 var myDate = new Date("01/31/2012"); var result1 = myDate.addMonths(1); var myDate2 = new Date("01/31/2011"); var result2 = myDate2.addMonths(1); 

– >> newDate.addMonths -> mydate.addMonths

result1 = “29 de fevereiro de 2012”

result2 = “28 de fevereiro de 2011”

Eu recomendo dar uma olhada no datejs . Com sua API, torna-se fácil adicionar um mês (e muitas outras funcionalidades de data):

 var one_month_from_your_date = your_date_object.add(1).month(); 

O que é bom sobre datejs é que ele lida com casos de ponta, porque tecnicamente você pode fazer isso usando o object Date nativo e seus methods anexados. Mas você acaba puxando o cabelo para fora dos casos, que a datejs já cuidou de você.

Além disso, é open source!