分别用 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; }