8

如果我有两个日期范围(例如 5 月 1 日 - 5 月 31 日和 5 月 23 日 - 6 月 5 日),那么在 PHP 中找出这两个时期重叠多少天的最佳方法是什么(所以它会返回 9)?有没有办法使用 DatePeriod 对象来做到这一点?

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

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

4

2 回答 2

34

感谢@phpisuber01 和确定两个日期范围是否重叠在这里提供了基本逻辑。这四个变量需要是 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
}
于 2013-01-07T21:01:19.680 回答
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

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

于 2013-01-07T19:34:50.553 回答