element el-date-picke时间范围计算相差天数除以分期数得到每一期的开始日期和结束日期

js计算例如开始时间2023-10-12 结束时间2023-10-20间隔相差天数为八天 八天除以二就是每四天分为一个周期 计算出这四天的开始日期和结束日期,封装方法最终返回一个对象每一个数组是一个周期的开始时间和结束时间,并且兼容相隔天数除以分期数除不尽的情况例如2023-10-10,  下面请看代码

 <el-date-picker
    style="width: 100%"
    v-model="formAdd.rangeDateRange"
    value-format="yyyy-MM-dd"
    type="daterange"
    :clearable="false"
    :picker-options="pickerOptions"
    @change="rangeTimeChange"
    range-separator="-"
    start-placeholder="开始日期范围"
    end-placeholder="结束日期范围"
></el-date-picker>
//计算日期间隔天数
 function getDiffDay(date_1, date_2) {
    // 计算两个日期之间的差值
    let totalDays, diffDate
    let myDate_1 = Date.parse(date_1)
    let myDate_2 = Date.parse(date_2)
    // 将两个日期都转换为毫秒格式,然后做差
    diffDate = Math.abs(myDate_1 - myDate_2) // 取相差毫秒数的绝对值
    totalDays = Math.floor(diffDate / (1000 * 3600 * 24)) // 向下取整
    // console.log(totalDays)
    return totalDays // 相差的天数
  }
 function calculatePeriods(startDate, endDate, intervalDays,num) {
    var periods = [];
    var periodDays = intervalDays / num; // 每个周期天数为相差天数除以二
    var periodStartDate = new Date(startDate);
    for (var i = 0; i < num; i++) {
        var periodEndDate = new Date(periodStartDate);
        periodEndDate.setDate(periodStartDate.getDate() + periodDays - 1);
        periods.push({
            startDate: periodStartDate.toISOString().split('T')[0],
            endDate: periodEndDate.toISOString().split('T')[0]
        });
        periodStartDate.setDate(periodEndDate.getDate() + 1); // 下一个周期的开始日期为当前 
        周期的结束日期的下一天
    }
    return periods;
}
    //分期方法change事件
    rangeTimeChange(value) {
      let day = getDiffDay(value[0], value[1])
      if( day < this.formAdd.PepNumber){
         this.$message.warning('选择的天数不能小于分期数')
         return false
      }
      let end = value[0].replace(/-/g, '/')
      let now = new Date(end).getTime()+ 86400000

      let calculatePeriodsDays = calculatePeriods(this.parseTime(now, "{y}-{m}- 
      {d}"),value[1],day,this.formAdd.PepNumber - 1)

      for(let i = 0; i < this.formAdd.payPeriodList.length; i++){
        if(i === 0){
          this.formAdd.payPeriodList[0].payStartTime = value[0];
          this.formAdd.payPeriodList[0].payEndTime = value[0];
        }else {
          this.formAdd.payPeriodList[i].payStartTime = calculatePeriodsDays[i - 
          1].startDate
          this.formAdd.payPeriodList[i].payEndTime = calculatePeriodsDays[i - 1].endDate

          this.$set(this.formAdd.payPeriodList[i].dateRange, 0, calculatePeriodsDays[i - 
          1].startDate)
          this.$set(this.formAdd.payPeriodList[i].dateRange, 1, calculatePeriodsDays[i - 
          1].endDate)
        }
      }
    },

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值