Ответ 1
Исправлено по состоянию на 25.06.2019:
var newDate = new Date(date.setMonth(date.getMonth()+8));
Старый отсюда:
var jan312009 = new Date(2009, 0, 31);
var eightMonthsFromJan312009 = jan312009.setMonth(jan312009.getMonth()+8);
Я хочу добавить месяцы к дате в JavaScript.
Например: я вставляю дату 06/01/2011
(format mm/dd/yyyy
), и теперь я хочу добавить 8 месяцев к этой дате. Я хочу, чтобы результат был 02/01/2012
.
Поэтому, добавляя месяцы, год может также увеличиться.
Исправлено по состоянию на 25.06.2019:
var newDate = new Date(date.setMonth(date.getMonth()+8));
Старый отсюда:
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);
Дата позаботится о фиксации года.
Я взглянул на дату и удалил код, необходимый для добавления месяцев в крайние случаи обработки даты (високосный год, более короткие месяцы и т.д.):
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 = "Feb 29 2012"
result2 = "Feb 28 2011"
Я очень рекомендую взглянуть на datejs. С его помощью api становится мертвым просто добавить месяц (и множество других функций даты):
var one_month_from_your_date = your_date_object.add(1).month();
Что приятно в datejs
, так это то, что он обрабатывает случаи краев, потому что технически вы можете сделать это, используя собственный Date
объект и связанные с ним методы. Но вы в конечном итоге вытягиваете свои волосы за края, которые datejs
позаботился о вас.
Плюс это с открытым исходным кодом!