vue相邻日期个数大于等于三合并

该代码段展示了一个JavaScript函数mergeDates,用于合并连续的日期。首先对日期列表进行排序,然后遍历日期检查连续性,如果相邻日期相差一天,则合并;否则,单独添加到结果列表中。时间处理由formatting函数完成,格式化日期和时间。
摘要由CSDN通过智能技术生成

效果:
在这里插入图片描述

//日期合并
    mergeDates(dates) {
      // 将日期列表按照从小到大的顺序排序
      dates.sort(function (a, b) {
        return a - b;
      });
      console.log("sort", dates)
      let start = 0;
      let end = 0;
      const mergedDates = [];
      for (let i = 1; i < dates.length; i++) {
        let diff = (new Date(dates[i]).getTime() - new Date(dates[i - 1]).getTime()) / (1000 * 60 * 60 * 24)
        if (diff == 1) { // 判断相邻日期是否连续
          end = i;
        } else {
          if (end - start + 1 >= 3) { // 判断当前日期段是否满足合并条件
            let startTime1 = formatting(new Date(dates[start]).getTime()).day
            let endTime1 = formatting(new Date(dates[end]).getTime()).day

            // mergedDates.push(`${dates[start]}~${dates[end]}`);
            mergedDates.push(`${startTime1}~${endTime1}日`);
          } else {
            for (let j = start; j <= end; j++) {
              let oneTime1 = formatting(new Date(dates[j]).getTime()).day

              // mergedDates.push(dates[j]);
              mergedDates.push(oneTime1 + '日');
            }
          }
          start = i;
          end = i;
        }
      }
      if (end - start + 1 >= 3) { // 处理最后一段日期
        let startTime2 = formatting(new Date(dates[start]).getTime()).day
        let endTime2 = formatting(new Date(dates[end]).getTime()).day


        // mergedDates.push(`${dates[start]}~${dates[end]}`);
        mergedDates.push(`${startTime2}~${endTime2}日`);
      } else {
        for (let j = start; j <= end; j++) {
          let oneTime2 = formatting(new Date(dates[j]).getTime()).day

          // mergedDates.push(dates[j]);
          mergedDates.push(oneTime2 + '日');
        }
      }
      console.log("mergedDates", mergedDates)
      return mergedDates;
    },

dates格式:

const dates = [
  new Date('2021-01-01'),
  new Date('2021-01-02'),
  new Date('2021-01-03'),
  new Date('2021-01-05'),
  new Date('2021-01-06'),
  ]

time.js:


//处理时间
export function formatting(time) {
  var time = new Date(time);
  var y = time.getFullYear();
  var m = time.getMonth() + 1;
  var d = time.getDate();
  var h = time.getHours();
  var mm = time.getMinutes();
  var s = time.getSeconds();
  m = m<10?"0"+m:m
  d = d<10?"0"+d:d
  h = h<10?"0"+h:h
  mm = mm<10?"0"+mm:mm
  s = s<10?"0"+s:s
  let obj = {
    date: y + "-" + m + "-" + d + " ",
    time: h + ":" + mm + ":" +s,
    day: d
  };
  return obj;
};

参考:
不过是连续两个以上就合并了
Java后台如何判断一串数字是否连续,连续合并数字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值