簡體   English   中英

如何在Carbon中獲得兩個時間間隔之間的差異

[英]How to get difference between two intervals of time in Carbon

我有兩次時間間隔,比方說

  • 區間 X:[01-11-2019 08:00, 01-11-2019 14:00]
  • 區間 Y:[01-11-2019 12:00, 01-11-2019 17:00]

我需要得到這些間隔之間的相交,所以答案應該是 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM