如何测试两个时间范围是否重叠?

时间:2014-03-25 15:32:31

标签: ruby datetime ruby-on-rails-4 range

我需要实现预订功能,并确保预订不会在Rails应用程序中重叠。

cover?between?方法并不是我需要的。与同一型号上的其他潜在范围相比,我必须确保时间范围的唯一性,并且有效地进行。

我认为可以使用overlaps?完成。问题是,对于这样的事情,它返回TRUE:

(1..5).overlaps?(5..9)
=> true

如果我将预订结果与另一个预订结果进行比较(3:30 - 4:004:00 - 4:30),则表示它们会重叠,但从技术上讲它们并不重叠。那会是个问题吗?

ValidatesOverlap似乎处理了这个问题,包括边缘重叠。

有什么建议吗?

2 个答案:

答案 0 :(得分:11)

def overlap?(x,y)
  (x.first - y.end) * (y.first - x.end) > 0
end

会奏效。问题是Interval使用了>=,您可以在“Test if two date ranges overlap in Ruby or Rails”中看到。

答案 1 :(得分:2)

对于您的方案,为什么我们必须包含结束时间?毕竟,预订在那时完成,从那时起可以使用插槽。所以下面应该有意义。

(1...5).overlaps?(5...9)