在一个项目中,需求是点击左右箭头变更日期,后台换算日期区间。日期段有设置“按月”,如下图
这时点左箭头,需求是日期要变成2022-09-30。如果直接用js的setMonth(d0.getMonth() -1,其结果是2022-10-01,不是预期的结果,因为9月份没有31日,自动就上整到10月1日。
正确做法如下:
function addmonth(date, n) {
let d0 = new Date(date);
let d = new Date(date);
let d1 = new Date(d0.setMonth(d0.getMonth() + n));
let day = d.getDate();
//跨月时,月末30,31会出现day不一样
if (day != d1.getDate()) {
d1.setDate(0); //设置成前月的最后1天
}
let m = d1.getMonth() + 1;
let mm = m.toString();
if (m < 10)
mm = "0" + mm;
let dd0 = d1.getDate();
let dd = dd0.toString();
if (dd0 < 10)
dd = "0" + dd;
return d1.getFullYear() + '-' + mm + '-' + dd;
}
关键是 setDate(0)这个函数。