// 判断闰年代码
public isLeapYear(Year) {
if (((Year % 4) == 0) && ((Year % 100) != 0) || ((Year % 400) == 0)) {
return (true);
} else {
return (false);
}
}
// 非自然月
public setMonth(date, num) {
date = new Date(date);
let day = date.getDate();
date.setMonth(date.getMonth() + (num * 1), 1);
// getMonth()的取值范围0~11,所以这里加一
let mo = date.getMonth() + 1;
// 小月
if (mo == 4 || mo == 6 || mo == 9 || mo == 11) {
if (day > 30) {
day = 30
}
}
// 2月
else if (mo == 2) {
if (this.isLeapYear(date.getFullYear())) {
if (day > 29) {
day = 29
}
} else if (day > 28) {
day = 28
}
}
// 大月
else {
if (day > 31) {
day = 31
}
}
return new Date(date.getFullYear(), date.getMonth(), day)
}
借鉴自https://www.cnblogs.com/linyijia/p/6118835.html
↓↓↓↓短小精悍的写法↓↓↓↓
public setMonth(now, addMonth) {
let targetDate = 1;
let target = new Date(now.getFullYear(), now.getMonth() + addMonth, targetDate);
let maxDays = new Date(target.getFullYear(), target.getMonth() + 1, 0).getDate();
targetDate = now.getDate();
if (now.getDate() > maxDays) {
targetDate = maxDays;
}
return target.setDate(targetDate);
}
【效果图】