确保多个非重叠时间范围的好方法

时间:2016-04-14 15:17:53

标签: javascript datetime logic

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

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

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

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

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

1 个答案:

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