[英]How to get difference between two intervals of time in Carbon
我有兩次時間間隔,比方說
我需要得到這些間隔之間的相交,所以答案應該是 2 小時,因為間隔 Y 僅在 2 小時內與間隔 X 相交,那么如何在 Carbon 中做到這一點? 有沒有圖書館或 function 可以做到這一點? 我已經搜索但沒有有用的結果。 謝謝
請注意,我的意思是兩個間隔之間的差異,而不僅僅是 startDate 和 endDate
間隔表示從時間 A 到時間 B 的時間量,與開始時間或結束時間無關。 我猜你的意思是一個時期(日期范圍)。
您可以使用CarbonPeriod class 和簡單的 function 計算兩個日期范圍之間的重疊(交集)。
我想建議以下實現:
<?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"
你不需要一個圖書館怎么碳。 簡單地使用日期時間。
$iX0 = date_create('01-11-2019 08:00'); //Start interval X
$iX1 = date_create('01-11-2019 14:00'); //End interval X
$iY0 = date_create('01-11-2019 12:00'); //Start interval Y
$iY1 = date_create('01-11-2019 17:00'); //End interval Y
$i0 = MAX($iX0,$iY0);
$i1 = Min($iX1,$iY1);
if($i1 >= $i0){
$diff = $i0->diff($i1);
echo $diff->h." Hours"; //full Hours
}
else {
echo 'no itersect';
}
Output:
2 Hours
注意:此示例僅計算完整小時數,不包括分鍾和秒數。
自己試試: https://3v4l.org/uS1Fh
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.