I have a function that can return first day and last day of a week based on date range given but apparently I got some problems in the function as it will return 8 days per week in an array and how can I set the end date of a week to Sunday as now the end date is Monday.
PHP:
private function rangeWeek(string $start,string $end): array
{
$start = new DateTime($start);
$end = new DateTime($end);
$interval = new DateInterval('P1D');
$period = new DatePeriod($start, $interval, $end);
$weeks = [];
$oldWeek = null;
$weekStart = null;
foreach ($period as $date) {
$week = $date->format('W');
if ($week !== $oldWeek) {
if (null === $weekStart) {
$oldWeek = $week;
$weekStart = $date->format('Y-m-d');
} else {
$weeks[] = ['start' => $weekStart, 'end' => $date->format('Y-m-d'), 'week' => $week];
$weekStart = null;
}
continue;
}
}
$weeks[] = ['start' => $weekStart, 'end' => $end->format('Y-m-d'), 'week' => $week];
return $weeks;
}
$startDate = '2022-08-08'; //Monday
$endDate = '2022-08-23'; //Tuesday
$weeks = rangeWeek($startDate, $endDate);
print_r($weeks);
Output:
Array
(
[0] => Array //This array return 8 days per week
(
[start] => 2022-08-08 //Monday
[end] => 2022-08-15 //Monday (should be end on Sunday)
[week] => 33
)
[1] => Array
(
[start] => 2022-08-16 //Tuesday (Should be start on Monday)
[end] => 2022-08-22 //Monday (should be end on Sunday)
[week] => 34
)
[2] => Array
(
[start] => null
[end] => 2022-08-23
[week] => 34
)
)
Expected Output:
Array
(
[0] => Array
(
[start] => 2022-08-08 //Monday
[end] => 2022-08-14 //Sunday
[week] => 33
)
[1] => Array
(
[start] => 2022-08-15 //Monday
[end] => 2022-08-21 //Sunday
[week] => 34
)
[2] => Array
(
[start] => 2022-08-22 //Monday
[end] => 2022-08-23 //Tuesday
[week] => 35
)
)