通过我的搜索,我发现以下简单的逻辑非常适用于确保两个时间范围不重叠。
(StartA <= EndB) and (EndA >= StartB)
但是如果我需要使用很多时间范围,它开始变得麻烦(使用我当前的方法)。很多If语句等。
那么什么是更好的方法?我已经考虑过填充对应于15分钟“时间”间隔的数组,并在添加新的时间范围时检查这些数组位置是否“被占用”。
这将使用javascript,所以我不知道数组是否最合适/轻量级。
答案 0 :(得分:1)
直接的方法是将日期存储在数组中,按开始日期对其进行排序,然后检查日期是否重叠。这是一个样本:
var dates = [];
var addDate = function(start, end){
dates.push({start: start, end: end});
};
var datesOverlap = function(){
var i;
dates.sort(function(a, b){ return a.start-b.start;});
for(i=0; i<dates.length-1; i++){
if(dates[i].end >= dates[i+1].start){
return true; // dates overlap
}
}
return false; // no dates overlap
};
使用addDate
功能添加要检查的所有日期。然后,您可以调用datesOverlap
函数来检查是否有任何日期重叠。