简体   繁体   English

获取 PHP、Carbon 中 2 个或更多重叠(或不重叠)日期范围内的天数

[英]Get count of days in 2 or more overlapping(or not) date ranges in PHP, Carbon

How can I get amount of days in 2 or more potentially overlapping date ranges (CarbonPeriod)?如何获得 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);

For example, as above I have 3 dates ranges.例如,如上所述,我有 3 个日期范围。 I need to get total amount of days in all 3 dates ranges without overlapping.我需要在不重叠的情况下获得所有 3 个日期范围内的总天数。 In this example it should be 20. Is there any build in method in Carbon/CarbonPeriod?在这个例子中它应该是 20。在 Carbon/CarbonPeriod 中是否有任何内置方法?

You can just merge and unique them.您可以合并和独特它们。

$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 dates, only days that were not duplicated.
$uniqueDays = array_unique(array_merge($dateRange_1->toArray(), $dateRange_2->toArray(), $dateRange_3->toArray()));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM