js判断两个时间段(格式为xx:xx,24小时制)是否重叠

        例如检测一时间09:00~18:00与其它选择的时间段是否存在重叠,我自己的思路如下

  1. 将时间处理格式为Number格式进行比较,例如09:00~18:00处理为900和1800
  2. 判断已转换格式的检测时间的开始时间是否小于结束时间,如果小于,则该时间段在同一天,反之该时间段跨越到了第二天
  3. 判断选择的时间段在检测时间段的时间轴左边还是右边,分类讨论

        以下贴上自己的代码图,仅供参考!

// 选择时间段是否与检测时间段重叠
isOverlap() {
	// 将选择的时间段处理为Int格式判断,this.startTime定义为选择的时间段开始时间,this.endTime定义为选择的时间段结束时间
    // 此处的this.startTime = "09:00", this.endTime = "18:00"(举例)
	let startTime = parseInt(this.startTime.split(':')[0] + this.startTime.split(':')[1])    //900
	let endTime = parseInt(this.endTime.split(':')[0] + this.endTime.split(':')[1])    //1800
	// 将检测的时间段处理为Int格式判断,同上
    let isStartTime = parseInt(this.isStartTime.split(':')[0] + this.isStartTime.split(':')[1])
	let isEndTime = parseInt(this.isEndTime .split(':')[0] + this.isEndTime.split(':')[1])
	// 如果检测时间段存在,并且选择时间为全天,则肯定重复,这个判断的前提是检测时间段不为空
    if (startTime === endTime) {
	    return false
	}
/**************** 判断时间是否重叠,得先判断开始时间是否小于结束时间 ****************/
	// 说明:startTime: 选择时间段的开始时间,endTime: 选择时间段的结束时间
	// 说明:isStartTime: 检测时间段的开始时间,isEndTime: 检测时间段的结束时间
	// 前提一:检测时间段: 开始时间小于结束时间,即在同一天内
	if (isStartTime < isEndTime) {
		// 判断选择时间段分为三种情况,即可满足该区间与检测时间段不会重复
		// 情况一:时间段在检测时间段左边并且不跨越00:00,即满足startTime<endTime<=isStartTime
		// 情况二:时间段在检测时间段右边并且不跨越00:00,即满足isEndTime<=startTime<endTime
		// 情况三:时间段跨越00:00,即满足start>end且(startTime>=isEndTime并且endTime<=isStartTime)
		if (startTime < endTime && endTime <= isStartTime) {
			return true
		} else if (isEndTime <= startTime && startTime < endTime) {
			return true
		} else if (startTime > endTime && startTime >= isEndTime && endTime <= isStartTime) {
			return true
		} else {
			return false
		}
	} else if(isStartTime > isEndTime) {
		// 前提二:检测时间段: 开始时间大于结束时间,即跨越00:00到第二天,为了保证不会与选择时间段重叠,即选择时间段不可能跨越00:00到第二天
		// 判断选择时间段分为一种情况,即可满足该区间不与检测时间段重复,该时间段在检测时间段左边或是右边并且不跨越00:00的情况都是同一种情况
		// 即满足isEndTime<=startTime<endTime<=isStartTime
		if (isEndTime <= startTime && startTime < endTime && endTime <= isStartTime) {
			return true
		} else {
			return false
		}
	} else {
		// 前提三:检测时间段为全天时间段,例如09:00~09:00,选择时间段无论怎么选都会重叠
		return false
	}
    return true
},

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值