时间减一天同时改变年月日

 这段代码能够处理跨越月份或年份,以及闰年、平年的情况。如果当前日期是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;
    },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值