/*
* 从已知日期或当前日期开始计算下一个月的日期
* 通过 getNextMoth("yyyy-MM-dd") 或 getNextMoth() 调用方法
* nowDate 格式为 "yyyy-MM-dd"
* 返回值类型格式为 "yyyy-MM-dd"
* */
function getNextMoth(nowDate) {
let date, year, month, day;
if (nowDate === null || nowDate === ""){ // 判断是否有参数
date = new Date(),
year = date.getFullYear(),
month = date.getMonth() + 1,
day = date.getDate();
} else {
let obj = nowDate.split("-");
year = parseInt(obj[0], 10);
month = parseInt(obj[1], 10);
day = parseInt(obj[2], 10);
}
let b_year, b_month, b_day;
if (month === 12){ // 如果为 12 月,进一年
b_year = year + 1;
} else {
b_year = year;
}
let b_month_arr = [3, 5, 8, 10];
if (b_month_arr.includes(month) && day === 31){ // 如果月份是大月,则要处理 31 号
b_month = month + 2;
b_day = 1;
} else if (month === 1 && ((year % 4 === 0 && year % 100 != 0)
|| year % 400 === 0) && day >= 29){ // 若是闰年 1 月,则要处理大于 29 号的日子
if (day === 29) {
b_month = month + 1;
b_day = day;
} else {
b_month = month + 2;
b_day = day % 29;
}
} else if (month === 1 && !((year % 4 === 0 && year % 100 != 0)
|| year % 400 === 0) && day >= 28){ // 若不是闰年且是 1 月,则要处理大于 28 号的日子
if (day === 29) {
b_month = month + 1;
b_day = day;
} else {
b_month = month + 2;
b_day = day % 28;
}
} else {
b_month = month + 1 > 12 ? (month + 1) % 12 : month + 1;
b_day = day;
}
let t_month = b_month + "";
if (b_month < 10){ // 如果月份小于 10,在其前面加上 0
t_month = "0" + t_month;
}
let t_day = b_day + "";
if (b_day < 10){ // 如果日期小于 10,在其前面加上 0
t_day = "0" + t_day;
}
let b_Date = (b_year + "-" + t_month + "-" + t_day).toString();
return b_Date; // return 拼接结果
}
当我们在前端需要获取当前日期或者传入日期的下一个月具体日期时,可以调用该接口,在前端界面需要导入该js文件。
<script src="${pageContext.request.contextPath}/statics/js/getNextMonth.js"></script>