如何测试两个时间段是否重叠



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

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

我认为可以用overlaps?。问题是,对于这样的内容,它返回TRUE:

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

如果我比较在另一个开始时结束的预订(3:30 - 4:004: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)

相关内容

  • 没有找到相关文章

最新更新