判断两个时间段是否有交集
前言:项目中遇到了类似会议室预约的时间段被占用,预约车辆时间段被占用等。
start:预约开始时间。
end:预约结束时间。
思考🤔:
那几种情况,可以正常预约(没有交集)。推荐
- 首先我们看下图可得知,如果我们想要两个时间段没有交集,就需要有这样的几种条件
a >= end
b <= start
转换为Condition则是 (a >= end) or (b <= start)
那么尝试,反着思考一下:
哪几种情况,是不可以正常预约(有交集)。
-
(a >= start & a <= end)
-
(b >= start & b <= end)
-
(a <= start & b >= end)
-
(a >= start & b <= end)
合并则是 (a >= start & a <= end) or (b >= start & b <= end) or (a <= start & b >= end) or (a >= start & b <= end)
取反(没有交集)
(a < start || a > end) and (b < start || a > end) and (a > start || b < end) and (a < start || b > end)
优化(没有交集)
(a < start || a > end) and (b < start || b > end) and (a > start || b < end)
总结:思路不太清楚可以画个图就明了了,第一种方式简单易懂一些。第二种比较绕。第一种方式有交集的也可以通过取反来拿到对应的Condition