利用moment.js获取一段时间范围内含有的周末的天数

先讲一下大体的思路,其实很简单,就是把这段时间分成三段来计算。
即:前段不满七天的部分,中段满七天的整周部分,后段又是剩下的不满七天的部分。分别求出每段包含的周末天数即可。

getWeekDayCount(start: any, end: any) {
    start = moment(start)
    end = moment(end)
    let isNotBefore = moment(start).isBefore(end) || start._i === end._i
    if (!isNotBefore) {
     return null
    }
    const range = moment(end).diff(moment(start));
    const d = moment.duration(range);
    const days = d.asDays() + 1;  // 总天数
    let weekendDays = 0 
    // 计算当前是周几
    let w = moment(start).day() || 7
    if (w > 5) { // 大于周五
      weekendDays += Math.min(8 - w, Number(days))
    } else {
      if (Number(days) > 7 - w) weekendDays += 2
      else if (Number(days) === 7 - w) weekendDays += 1
    }
    // 去除前段之后还剩下的天数
    let rest = days - (8 - w)
    if (rest >= 6 && rest <= 7) { // 如果剩下天数是6-7天
      weekendDays += rest - 5
    } else if (rest > 7) {
      // 剩下的整周数
      let restW = Math.floor(rest / 7)
      weekendDays += restW * 2
      // 去除中段之后还剩下的天数
      rest -= restW * 7
      if (rest >= 6 && rest <= 7) { // 如果剩下天数是6-7天
        weekendDays += rest - 5
      }
    }

    return {
      weekDays: days - weekendDays,
      weekendDays: weekendDays,
      days: days
    }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值