首页 > 技术文章 > 如何判断两个时间段是否有重叠部分

caiawo 2021-02-25 11:08 原文

分别用 startDate1,endDate1 和 startDate2,endDate2 表示两段时间
如果考虑写出两个时间段重叠的每种情况的话,会比较多,写出的判断也比较长,可以反过来考虑如果判断两段时间不重叠的情况。
考虑一段时间不动,另一段时间不重叠的话,另一段时间只能在不动的时间段的一前一后。

这里假设不动的蓝色块时间段为 startDate2,endDate2 
很容易写出不重叠的判断:
endDate1 < startDate2 || endDate2 < startDate1
这时再取反就为重叠的条件
!(endDate1 < startDate2 || endDate2 < startDate1)
即为:
endDate1 >= startDate2 && endDate2 >= startDate1

这里可以用 PHP 封装成方法,因为PHP可以直接比较时间大小所以不用转成时间戳比较了。

当然传进来的时间参数需要是正确的时间格式。

function isOverlap($startDate1, $endDate1, $startDate2, $endDate2)
{
    return $endDate1 >= $startDate2 && $startDate1 <= $endDate2;
}

 

 

推荐阅读