2016-04-14 47 views
0

通过我的搜索,我发现以下简单的逻辑非常适合确保两个时间范围不重叠。确保多个非重叠时间范围的好方法

(StartA <= EndB) and (EndA >= StartB) 

但是,如果我需要使用很多时间范围,它开始变得麻烦(用我目前的方法)。很多If语句等等。

那么什么是更好的方法?我已经考虑过填充对应于15分钟'时间'的数组,并且在添加新时间范围时检查这些数组位置是否“被占用”。

这将使用JavaScript,所以我不知道数组是否最合适/轻量级。

回答

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函数来检查是否有日期重叠。

+0

看起来像一个非常轻量级的解决方案,谢谢! – Burninrock24