网络上常见的思路
var nowDate = date.addMonth(3); //date格式的时间类型
Date.prototype.addMonth = function (addMonth) {
var y = this.getFullYear();
var m = this.getMonth();
var nextY = y;
var nextM = m;
//如果当前月+要加上的月>11 这里之所以用11是因为 js的月份从0开始
if ((m + addMonth)> 11) {
nextY = y + 1;
nextM = parseInt(m + addMonth) - 12;
} else {
nextM = this.getMonth() + addMonth
}
var daysInNextMonth = Date.daysInMonth(nextY, nextM);
var day = this.getDate();
if (day > daysInNextMonth) {
day = daysInNextMonth;
}
return new Date(nextY, nextM, day);
};
Date.daysInMonth = function (year, month) {
if (month == 1) {
if (year % 4 == 0 && year % 100 != 0)
return 29;
else
return 28;
} else if ((month <= 6 && month % 2 == 0) || (month = 6 && month % 2 == 1))
return 31;
else
return 30;
};
换个思路
function dateAddMonth (date, addMonth) {
const array = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
const month = date.getMonth()
const allMonth = month + addMonth
const startMonth = month
let sumDays = 0
let year = date.getFullYear()
let index = startMonth
if (addMonth > 0) {
for (let i = startMonth; i < allMonth; i++) {
if (((year % 100 === 0 && year % 400 === 0) || (year % 100 !== 0 && year % 4 === 0)) && index === 1) {
sumDays += 29
} else {
sumDays += array[index]
}
index++
if (index >= array.length) {
year++
index = 0
}
}
} else {
for (let i = startMonth; i >= allMonth; i--) {
if (((year % 100 === 0 && year % 400 === 0) || (year % 100 !== 0 && year % 4 === 0)) && index === 1) {
sumDays -= 29
} else {
sumDays -= array[index]
}
index--
if (index <= 0) {
year--
index = 11
}
}
}
console.log(sumDays)
date.setDate(date.getDate() + sumDays)
return date
}
网络上的思路可能需要改进,因为如果增加12个月以上,就会出问题