js校验多个时间段的时间是否有交叉
参考博客:
Java日期时间API系列37-----时间段是否有重叠(交集)的计算方法
Java 最优雅方式校验时间段重叠
判断是否有交叉数据
let timePeriod = [
{
start: dateList[0].value, //时间段1的开始时间 时间格式为1130(代表11:30)
end: dateList[1].value,//时间段1的结束时间
},
{
start: dateList[2].value, //时间段2的开始时间
end: dateList[3].value,//时间段2的结束时间
},
{
start: dateList[4].value, //时间段3的开始时间
end: dateList[5].value,//时间段3的结束时间
},
{
start: dateList[6].value, //时间段4的开始时间
end: dateList[7].value,//时间段4的结束时间
},
{
start: dateList[8].value, //时间段5的开始时间
end: dateList[9].value,//时间段5的结束时间
},
{
start: dateList[10].value, //时间段6的开始时间
end: dateList[11].value,//时间段6的结束时间
},
]
// 先按开始时间排序(需要保证开始时间小于结束时间)
timePeriod.sort((a, b) => {
return a.start - b.start
})
// 去除时间为空的时间段
let timePeriodValue = timePeriod.filter(item => item.start != "") || []
// 循环一遍,看有无交叉数据
for (let i = 1; i < timePeriodValue.length; i++) {
// !(timePeriodValue[i - 1].end < timePeriodValue[i].start) 时间段交叉(严格)
// 如果1030与1030不算交叉 则!(timePeriodValue[i - 1].end <=timePeriodValue[i].start) (非严格)
if ( !timePeriodValue[i - 1].end < timePeriodValue[i].start ) {
return callback(new Error("时间段不能交叉!")
}
}