js 计算日期跨月情况

在一个项目中,需求是点击左右箭头变更日期,后台换算日期区间。日期段有设置“按月”,如下图

这时点左箭头,需求是日期要变成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)这个函数。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值