如何查找PHP中另一个日期范围内的日期范围内的天数?

时间:2015-06-26 13:02:44

标签: php datetime date-range php-carbon

我正在使用Carbon PHP库。重复问题中的答案使用PHP的内置函数。

count how many days within a date range are within another date range

以下是我用来查找日期范围($userDateStart$userDateEnd)是否与另一个日期范围($couponStart and $ couponEnd`)相关的代码,它可以正常运行任何错误,但我不知道如何找到在此日期范围内重叠/存在的日期?

我正在使用的库是http://carbon.nesbot.com/docs/

在这种情况下,预期结果应为4 ..希望你能帮助我。

$userDateStart = Carbon::createFromFormat('Y-m-d','2015-06-26');
$userDateEnd  = Carbon::createFromFormat('Y-m-d','2015-06-29');

$couponStart  = Carbon::createFromFormat('Y-m-d','2015-06-26');
$couponEnd    = Carbon::createFromFormat('Y-m-d','2015-10-31');

if(($userDateStart >= $couponStart && $userDateEnd <= $couponEnd) ||
    ($couponStart >= $userDateStart && $couponEnd <= $userDateEnd)){
    die("Yes,The date is within this date range");
}
die("No,It is not within this date range");

1 个答案:

答案 0 :(得分:0)

根据提供的文档,您需要使用:

$dt = Carbon::create(2012, 4, 30, 0);
echo $dt->diffInDays($dt->copy()->addMonth()); // 30
echo $dt->diffInDays($dt->copy()->addWeek()); // 7

因此,为了使用您的程序,我认为您需要这样做:

$userDateStart = Carbon::createFromFormat('Y-m-d','2015-06-26');
$userDateEnd  = Carbon::createFromFormat('Y-m-d','2015-06-29');

$couponStart  = Carbon::createFromFormat('Y-m-d','2015-06-26');
$couponEnd    = Carbon::createFromFormat('Y-m-d','2015-10-31');

//Determin the highest date from the starts and the minimum dates from the ends
$startBetweenDate = $userDateStart->max($couponStart);
$endBetweenDate = $userDateEnd->min($couponEnd);

//Now find how many days are between
echo $startBetweenDate->diffInDays($endBetweenDate); //Should be 4

请注意:未经测试,因为我没有安装Carbon库。