Как добавить месяцы к дате в JavaScript?

Я хочу добавить месяцы к дате в JavaScript.

Например: я вставляю дату 06/01/2011 (формат mm/dd/yyyy) и теперь я хочу добавить 8 месяцев к этой дате. Я хочу, чтобы результат был 02/01/2012,

Таким образом, при добавлении месяцев, год также может увеличиться.

4 ответа

Решение

Отсюда:

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

Разделите вашу дату на год, месяц и день, затем используйте Date:

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

Дата позаботится об исправлении года.

Я взглянул на datejs и вычеркнул код, необходимый для добавления месяцев к крайним случаям обработки дат (високосный год, более короткие месяцы и т. Д.):

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;
};

Это добавит функцию "addMonths()" к любому объекту даты javascript, который должен обрабатывать крайние случаи. Спасибо Coolite Inc!

Использование:

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 февраля 2012"

result2 = "28 февраля 2011"

Я очень рекомендую взглянуть на datejs. С его API-интерфейс становится просто офигительно добавить месяц (и множество других функций даты):

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

Что хорошего в datejs является то, что он обрабатывает крайние случаи, потому что технически вы можете сделать это с помощью нативного Date объект и его прикрепленные методы. Но в конечном итоге вы тянете волосы за край, что datejs позаботился о вас.

Плюс это с открытым исходным кодом!

Другие вопросы по тегам