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

Joh*_*eau 6 ruby datetime range ruby-on-rails-4

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

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

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

(1..5).overlaps?(5..9)
=> true
Run Code Online (Sandbox Code Playgroud)

如果我比较一个在另一个开始时结束的预订(3:30 - 4:00对比4:00 - 4:30),它会说它们确实重叠,但它们在技术上没有.那会是个问题吗?

ValidatesOverlap似乎处理问题,包括边缘重叠.

有什么建议?

Rob*_*ski 11

def overlap?(x,y)
  (x.first - y.end) * (y.first - x.end) > 0
end
Run Code Online (Sandbox Code Playgroud)

将工作.问题是Interval使用>=,如" 测试两个日期范围是否在Ruby或Rails中重叠 "中所示.


Vij*_*ena 6

对于您的场景,为什么我们必须包括结束时间?毕竟,预订已在那时完成,并且从那时起就有空位了。所以下面应该是有道理的。

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