Обратите внимание, что в первом примере разница составляет 6 дней, а не 7 дней.
код
<?php
$dateRanges =
[
[
'start' => "2019-06-01",
'end' => "2019-06-07",
],
[
'start' => "2019-06-05",
'end' => "2019-06-10",
],
[
'start' => "2019-06-20",
'end' => "2019-06-30",
]
];
$uniqueDayDiffCount = 0;
foreach($dateRanges as $dateRange) {
$start = new DateTime($dateRange['start']);
$end = new DateTime($dateRange['end']);
$first = $start;
/**
* Check if a new $start date overlaps
* with the prvious end date ($last) and if so
* take for calcualtion as start
* date ($first) the previous
* end date ($last)
*/
if (isset($last) && $last > $start) {
$first = $last;
}
$last = $end;
echo "\n<br>Start: " . $start->format("Y-m-d");
echo "\n<br>End: " . $end->format("Y-m-d");
echo "\n<br>Calc for Start: " . $first->format("Y-m-d");
echo "\n<br>Calc for End: " . $last->format("Y-m-d");
$diff = $last->diff($first)->format("%a");
$uniqueDayDiffCount += $diff;
echo "\n<br>Diff: $diff\n<br>DayCount: $uniqueDayDiffCount";
echo "\n<br>---------------------\n<br>";
}
echo "\n<br>Total DayCount: $uniqueDayDiffCount";
Результат
Start: 2019-06-01
End: 2019-06-07
Calc for Start: 2019-06-01
Calc for End: 2019-06-07
Diff: 6
DayCount: 6
---------------------
Start: 2019-06-05
End: 2019-06-10
Calc for Start: 2019-06-07
Calc for End: 2019-06-10
Diff: 3
DayCount: 9
---------------------
Start: 2019-06-20
End: 2019-06-30
Calc for Start: 2019-06-20
Calc for End: 2019-06-30
Diff: 10
DayCount: 19
---------------------
Total DayCount: 19