我有两次间隔时间,比方说
我需要获得这些间隔之间的交集,因此答案应该是 2 小时,因为间隔 Y 与间隔 X 仅在 2 小时内相交,那么如何在 Carbon 中做到这一点?有没有任何库或函数可以做到这一点?我已经搜索过但没有有用的结果。谢谢
请注意,我的意思是两个间隔之间的差异,而不仅仅是开始日期和结束日期
时间间隔表示从时间 A 到时间 B 所经过的时间量,无论开始时间或结束时间如何。我猜你的意思是一个时期(日期范围)。
您可以使用CarbonPeriod类和简单函数计算两个日期范围之间的重叠(交集)。
我想建议以下实施:
<?php
use Carbon\CarbonInterval;
use Carbon\CarbonPeriod;
function calculatePeriodsOverlap(CarbonPeriod $periodA, CarbonPeriod $periodB): CarbonInterval
{
if (!$periodA->overlaps($periodB)) {
return new CarbonInterval(0);
}
$firstEndDate = min($periodA->calculateEnd(), $periodB->calculateEnd());
$latestStartDate = max($periodA->getStartDate(), $periodB->getStartDate());
return CarbonInterval::make($firstEndDate->diff($latestStartDate));
}
$periodX = new CarbonPeriod('01-11-2019 08:00', '01-11-2019 14:00');
$periodY = new CarbonPeriod('01-11-2019 12:00', '01-11-2019 17:00');
calculatePeriodsOverlap($periodX, $periodY)->forHumans(); // returns "2 hours"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4055 次 |
| 最近记录: |