如何测试两个时间范围是否重叠?
我需要实现预订function,并确保预订不会在Rails应用程序中重叠。
cover?
between?
方法不是我需要的。 与同一型号上的其他潜在范围相比,我必须确保时间范围的唯一性,并且有效地进行。
我认为可以使用overlaps?
来完成它overlaps?
。 问题是,对于这样的事情,它返回TRUE:
(1..5).overlaps?(5..9) => true
如果我比较了另一个开始时的预订( 3:30 - 4:00
对4:00 - 4:30
),它会说它们确实重叠,但技术上并没有。 那会是个问题吗?
ValidatesOverlap似乎处理问题,包括边缘重叠。
有什么建议?
def overlap?(x,y) (x.first - y.end) * (y.first - x.end) > 0 end
将工作。 问题是Interval
使用>=
,你可以在“ 测试两个日期范围是否在Ruby或Rails中重叠 ”中看到。
对于您的方案,为什么我们必须包括结束时间? 毕竟,预订在那时完成,从那时起可以使用插槽。 所以下面应该有意义。
(1...5).overlaps?(5...9)