这段代码能够处理跨越月份或年份,以及闰年、平年的情况。如果当前日期是1号,判断月份,如果是一月份,则需要将年份减1,月份变为11(即上一年的12月份),日期变为31号;如果是三月份,则需要判断是否为闰年,如果是,则日期变为29号,否则变为28号,月份变为2;如果是30天的月份(4月、6月、9月、11月),则日期变为上一个月的30号,月份减1;如果是31天的月份,则日期变为上一个月的31号,月份减1。如果当前日期不是1号,只需将day减1即可。当当前日期是1月1日时,需将日期变为上一年的12月31日。又例如,当当前日期是闰年的2月29日时,需将日期变为上一天,即2月28日。
//天数减一
handleTime(year, month, day) {
if (day == 1) {
if (month == 0) {
year--;
month = 12;
day = 31; //上一年12月31日
//---
} else if (month == 2) {//处理 3 月
if ((year % 4 === 0 && year % 100 != 0) || (year % 400 === 0)) {
//是闰年
day = 29;
} else {
//是平年
day = 28;
}
month--;
//--
} else if ([4, 6, 9, 11].indexOf(month) > -1) {//如果是30天的月份
month--;
day = 30;
} else {//如果是31天的月份
month--;
day = 31;
}
} else {//当前日期是闰年的2月29日时将日期变为上一天即2月28日
if (month === 1 && day === 29) { //如果是2月29日
if ((year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0)) { //闰年
day--;
} else { //平年
day = 28;
}
} else {
day--;
}
}
//处理日期格式
if (month >= 1 && month <= 9) { month = "0" + month; }
if (day >= 0 && day <= 9) { day = "0" + day; }
let nextDate = year + "-" + month + "-" + day;
return nextDate;
},
2万+

被折叠的 条评论
为什么被折叠?



