通过搜索,我发现以下简单逻辑可以很好地确保两个时间范围不重叠。

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


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

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

这将使用javascript,因此我不知道数组是否最合适/轻巧。

最佳答案

一种简单的方法是将日期存储在数组中,按开始日期对其进行排序,然后检查日期是否重叠。这是一个示例:

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

关于javascript - 确保多个非重叠时间范围的好方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36627370/

10-13 02:24