搜尋

首頁  >  問答  >  主體

計算重疊或非重疊日期範圍中的天數:PHP和Carbon實作方法

如何取得2個或多個潛在重疊日期範圍(CarbonPeriod)的天數?

$startDate_1 = '2022-12-01';
    $endDate_1 = '2022-12-10';

    $startDate_2 = '2022-12-06';
    $endDate_2 = '2022-12-15';

    $startDate_3 = '2022-12-21';
    $endDate_3 = '2022-12-25';

    $dateRange_1 = CarbonPeriod::create($startDate_1, $endDate_1);
    $dateRange_2 = CarbonPeriod::create($startDate_2, $endDate_2);
    $dateRange_3 = CarbonPeriod::create($startDate_3, $endDate_3);

例如,如上所示,我有3個日期範圍。我需要取得所有3個日期範圍中不重疊的總天數。在這個例子中應該是20天。在Carbon / CarbonPeriod中是否有任何內建方法可以實現這個?

P粉754477325P粉754477325452 天前558

全部回覆(1)我來回復

  • P粉475126941

    P粉4751269412023-09-10 10:41:19

    你可以只需要合併去重它們。

    $startDate_1 = '2022-12-01';
    $endDate_1 = '2022-12-10';
    
    $startDate_2 = '2022-12-06';
    $endDate_2 = '2022-12-15';
    
    $startDate_3 = '2022-12-21';
    $endDate_3 = '2022-12-25';
    
    $dateRange_1 = CarbonPeriod::create($startDate_1, $endDate_1);
    $dateRange_2 = CarbonPeriod::create($startDate_2, $endDate_2);
    $dateRange_3 = CarbonPeriod::create($startDate_3, $endDate_3);
    
    // 20个日期,只包含没有重复的日期。
    $uniqueDays = array_unique(array_merge($dateRange_1->toArray(), $dateRange_2->toArray(), $dateRange_3->toArray()));
    

    回覆
    0
  • 取消回覆