判断多个时间是否有重复交集 JS

需求描述

选定24小时内任意时间,比较选定几组时间是否有重叠部分 ,如下图所示:


解题思路:

网上有各种各样方法,现结合自己的项目和想法,分享给大家~

1.首先把时间 0-24 看作一条X轴

2.把第一组数据分别跟其他组数据对比(两两对比)

3.判断两组数据重叠情况有四种,如下图

 4.判断两组数据不重叠情况有两种

 5.判断不重叠会简单很多,封装成函数。如下图

const isDateIntersection = (start1: string, end1: string, start2: string, end2: string) => {
  //1.传进来时间格式:‘08:00’ ‘00:00’ ,这里end1 end2 如果传进来是‘00:00’=‘24:00’
  let startdate1 = start1.split(':')[0][0] === '0' ? Number(start1.split(':')[0][1]) : Number(start1.split(':')[0])
  let enddate1 = end1.split(':')[0][0] === '0' ? Number(end1.split(':')[0][1]) : Number(end1.split(':')[0])
  enddate1 = enddate1 == 0 ? 24 : enddate1
  let startdate2 = start2.split(':')[0][0] === '0' ? Number(start2.split(':')[0][1]) : Number(start2.split(':')[0])
  let enddate2 = end2.split(':')[0][0] === '0' ? Number(end2.split(':')[0][1]) : Number(end2.split(':')[0])
  enddate2 = enddate2 == 0 ? 24 : enddate2
  if (enddate2 <= startdate1 || enddate1 <= startdate2) {
    console.log("1.没有冲突");
    return false;
  } else {
    console.log("2.发生冲突");
    return true
  }

}

 6.以上把 ‘08:00’ 转换为数字对比,如果是日期格式2022-10-11 16:00 ,或者觉得分割太麻烦,可以把时间转换为时间戳对比

7.循环比较

 let arr = [["08:00", "12:00"],["15:00", "20:00"],["19:00", "22:00"]]     
 //判断是否有重复日期
      let flag = false
        for (var i = 0; i < arr.length; i++) {
				if (flag) return;
				for (var j = 1 + i; j < arr.length; j++) {
					if(isDateIntersection(arr[i][0],arr[i][1],arr[j][0],arr[j][1])){
						flag = true;
						return;
					}
				}
      }

    if (flag) {
		console.log("发生冲突");
		
	 }else{
		console.log("没有冲突");
		
    }


 本篇代码是用 vue3+ ts 写,若是vue2 自己改改~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值