js判断2个时间段是否有重叠(时分)
原理:1天1440分钟,每个时间段都有对应的数值,生成2个数组,判断数组中是否有重叠数字
isTimeOverlap(startA, endA, startB, endB) {
if (!startA || !endA || !startB || !endB) return false
let sA = this.dealTime(startA);
let sB = this.dealTime(startB);
let eA = this.dealTime(endA);
let eB = this.dealTime(endB)
//不是时间段
if (sA === eA || sB === eB) return true
let isOverlap = false
let arrA = [] // 第一个时间段的区间
if (sA < eA) {
for (let i = sA; i < eA; i++) {
arrA.push(i)
}
} else {
for (let i = sA; i < 1440; i++) {
arrA.push(i)
}
for (let i = 0; i < eA; i++) {
arrA.push(i)
}
}
let arrB = [] // 第2个时间段的区间
if (sB < eB) {
for (let i = sB; i < eB; i++) {
arrB.push(i)
}
} else {
for (let i = sB; i < 1440; i++) {
arrB.push(i)
}
for (let i = 0; i < eB; i++) {
arrB.push(i)
}
}
for (let i = 0; i < arrA.length; i++) {
let h = arrB.findIndex((item) => { return item === arrA[i] })
if (h !== -1)isOverlap = true
}
//console.log(sA, sB, eA, eB, JSON.stringify(arrA),'\n', JSON.stringify(arrB))
return isOverlap;
},
dealTime(time) {
let t = time.split(":")
return parseInt(t[0]) * 60 + parseInt(t[1])
},
调用:
this.dataForm.dayModeTime1 = '14:00'
this.dataForm.dayModeTime2 = '22:00'
this.dataForm.nightModeTime1 = '22:00'
this.dataForm.nightModeTime2 = '12:00'
this.isTimeOverlap(this.dataForm.dayModeTime1, this.dataForm.dayModeTime2, this.dataForm.nightModeTime1, this.dataForm.nightModeTime2)

浙公网安备 33010602011771号