JS/Angular 非自然月的月份增加(适应闰年)

// 判断闰年代码

    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);
    }

【效果图】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值