判断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
    },

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值