如何在PHP中找到重叠的日期时段/日期范围?

时间:2013-01-07 19:26:37

标签: php date datetime compare overlap

如果我有两个日期范围(例如5月1日 - 5月31日和5月23日 - 6月5日),那么最好的方法是找出这两个时期在PHP中重叠的天数(因此会返回9)?有没有办法使用DatePeriod对象?

编辑(希望)澄清我的问题:

基本上我想要一个函数,给定任何两个日期范围,它将返回两个日期范围之间共同的天数。如果有重叠,它将返回重叠天数,否则它将返回0.我认为这可以通过为每个范围创建一个日期数组,循环遍历它们以查找相同的日期,并使用变量来计算比赛的数量 - 但我正在寻找更优雅的东西。

2 个答案:

答案 0 :(得分:26)

感谢@ phpisuber01和Determine Whether Two Date Ranges Overlap提供基本逻辑。这四个变量需要是DateTime对象:

function datesOverlap($start_one,$end_one,$start_two,$end_two) {

   if($start_one <= $end_two && $end_one >= $start_two) { //If the dates overlap
        return min($end_one,$end_two)->diff(max($start_two,$start_one))->days + 1; //return how many days overlap
   }

   return 0; //Return 0 if there is no overlap
}

答案 1 :(得分:2)

没有任何真实的信息以此为基础。以下是如何使用DateTime对象计算天数差异的基本示例。

$datetime1 = new DateTime('2013-05-23');
$datetime2 = new DateTime('2013-05-31');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days'); //returns 8 days

我假设您知道如何将字符串转换为可用的时间戳/格式。