【发布时间】:2017-06-08 09:37:00
【问题描述】:
我正在尝试确定两组日期/时间范围是否重叠 --- 返回 BOOLEAN 值。
考虑以下情况:
注意:我使用strtotime()将下面的每个日期/时间字符串(例如24-JAN-17 07:00)转换为时间戳
用于每种情况的表达式是:
$isOverlapping = (s1 < e2 && s2 < e1)
案例 1:
Let (s1, e1) be defined as (24-JAN-17 07:00, 24-JAN-17 17:00)
Let (s2, e2) be defined as (24-JAN-17 16:30, 24-JAN-17 17:30)
结果:
TRUE
(这是正确的)
案例 2:
Let (s1, e1) be defined as (24-JAN-17 07:00, 24-JAN-17 17:00)
Let (s2, e2) be defined as (24-JAN-17 16:30, 25-JAN-17 07:00)
结果:
TRUE
(这是正确的)
案例 3:
Let (s1, e1) be defined as (24-JAN-17 07:00, 24-JAN-17 17:00)
Let (s2, e2) be defined as (24-JAN-17 17:00, 25-JAN-17 07:30)
结果:
FALSE
(不正确)
据我了解,它这样做是因为(在上面#3 的情况下),它会溢出到第二天......但如果是这样的话,为什么它对Case 2 有效? (是不是因为重叠发生在同一天,与Case 3相反?)
无论如何,我的问题是,如何调整我的表达方式,使其涵盖上面的案例 3?
任何和所有的帮助表示赞赏!谢谢!
我已经查看了以下主题,但无济于事:
Determine Whether Two Date Ranges Overlap
Determining if two time ranges overlap at any point(具体为:https://stackoverflow.com/a/13387860/7458905)
【问题讨论】:
-
你的问题是日期是相等,所以把这个条件添加到你的逻辑中:
$isOverlapping = (s1 <= e2 && s2 <= e1) -
@Kaylined - OP 已经提到已经审查了确切的问答......