例如检测一时间09:00~18:00与其它选择的时间段是否存在重叠,我自己的思路如下
- 将时间处理格式为Number格式进行比较,例如09:00~18:00处理为900和1800
- 判断已转换格式的检测时间的开始时间是否小于结束时间,如果小于,则该时间段在同一天,反之该时间段跨越到了第二天
- 判断选择的时间段在检测时间段的时间轴左边还是右边,分类讨论
// 选择时间段是否与检测时间段重叠 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 },