判断时间范围是否重叠(原理)
首先问题来源:因为业务需求需要在前端设置一个时间范围,并且可以多次增加,但要保证时间范围不重叠。某一个时间范围内做特定的事情。
让我们来分析一下时间重叠有几种情况
第一种情况:R1的开始时间在R2时间范围内
图①
第二种情况:R1的结束时间在R2的时间范围内
图②
第三种情况:R1在R2内,或者R2在R1内
图③
了解这三种情况后,我们可以分析出分析出:一个时间范围的边与另一个时间范围的块进行比较,S代表开始的边,E代表结束的边。
第一种情况
R1_S >= R2_S && R1_S <= R2_E
第二种情况
R1_E >= R2_S && R1_E <= R2_E
结合一下就可以解决上面的两种情况 R1_S >= R2_S && R1_S <= R2_E || R1_E >= R2_S && R1_E <= R2_E 当条件成立则证明时间范围相互重叠。
第三种情况
第三种图可能刚开始看比较迷糊,两个包含的关系,但是我们再换种角度来看,R1在R2上移动的话是不是就是图三下面的样子?
没错!实际我们在上面就已经解决了这种情况。但是图③的上图我们还未解决,同理:R2在R1上移动。我们只需要判断R2的两个边界是否在R1块内。
R2_S >= R1_S && R2_S <= R1_E || R2_E >= R1_S && R2_E <= R1_E
我们将三种情况全部结合最终为
R1_S >= R2_S && R1_S <= R2_E || R1_E >= R2_S && R1_E <= R2_E || R2_S >= R1_S && R2_S <= R1_E || R2_E >= R1_S && R2_E <= R1_E
如果对您有帮助,能否给我一个赞呢?!