Я пытаюсь получить недельный диапазон за месяц, я несколько выполнил то, что ищу, но хотел бы, чтобы код был более надежным. Диапазоны данных будут использоваться для некоторых MySQL запросов, где я могу отфильтровать данные по диапазону данных.
Я бы хотел получить что-то вроде календаря Windows 10. Таким образом, результат равен
2020-03-01 to 2020-03-01
2020-03-02 to 2020-03-08
2020-03-09 to 2020-03-15
2020-03-16 to 2020-03-22
2020-03-23 to 2020-03-29
2020-03-30 to 2020-03-31
КОД
$start_date = date("Y-m-d", strtotime("first day of this month"));
$end_date = date("Y-m-d", strtotime("last day of this month"));
function getWeekDates($date, $start_date, $end_date) {
$week = date('W', strtotime($date));
$year = date('Y', strtotime($date));
$from = date("Y-m-d", strtotime("{$year}-W{$week}+1"));
if($from <= $start_date){
$from = $start_date;
}
$to = date("Y-m-d", strtotime("{$year}-W{$week}-7"));
if($to >= $end_date){
$to = $end_date;
}
echo $from." to ".$to.'<br>';
}
for($date = $start_date; $date <= $end_date; $date = date('Y-m-d', strtotime($date. ' + 7 day'))){
echo getWeekDates($date, $start_date, $end_date);
echo "\n";
}
Что приводит к
Последние два дня месяца отсутствуют (30 и 31).
2020-03-01 to 2020-03-01
2020-03-02 to 2020-03-08
2020-03-09 to 2020-03-15
2020-03-16 to 2020-03-22
2020-03-23 to 2020-03-29