判断时间范围是否重叠(原理)

首先问题来源:因为业务需求需要在前端设置一个时间范围,并且可以多次增加,但要保证时间范围不重叠。某一个时间范围内做特定的事情。

让我们来分析一下时间重叠有几种情况

第一种情况: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

如果对您有帮助,能否给我一个赞呢?!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值