• PHP. Есть ли решение, которое будет разбивать интервал дат на недельные периоды?

    @VlasTeLiNandCPONK
    Мне нужно было сделать то же самое, но диапазоны по две недели. Чтобы было по одной неделе, то надо просто убрать addWeek(). Сделал на Carbon вот так:
    function getWeekPeriods(Carbon $from, Carbon $to)
        {
            $weeks = [];
            $currentDate = $from;
    
            while ($to->greaterThan($currentDate)) {
                $currentDate = $currentDate->startOfDay();
                $endOfTwoWeeksRange = (clone $currentDate)->addWeek()->endOfWeek();
                if ($endOfTwoWeeksRange->greaterThan($to)) {
                    $weeks[] = ['start' => $currentDate->isoFormat('DD.MM.Y HH:mm:ss'), 'end' => $to->isoFormat('DD.MM.Y HH:mm:ss')];
                    break;
                }
                $weeks[] = ['start' => $currentDate->isoFormat('DD.MM.Y HH:mm:ss'), 'end' => $endOfTwoWeeksRange->isoFormat('DD.MM.Y HH:mm:ss')];
                $currentDate = $endOfTwoWeeksRange->addDay();
            }
            return $weeks;
        }


    Запрос:
    {
        "date_from":"2023-01-03",
        "date_to":"2023-02-28"
    }

    Ответ:
    [
        {
            "start": "03.01.2023 00:00:00",
            "end": "15.01.2023 23:59:59"
        },
        {
            "start": "16.01.2023 00:00:00",
            "end": "29.01.2023 23:59:59"
        },
        {
            "start": "30.01.2023 00:00:00",
            "end": "12.02.2023 23:59:59"
        },
        {
            "start": "13.02.2023 00:00:00",
            "end": "26.02.2023 23:59:59"
        },
        {
            "start": "27.02.2023 00:00:00",
            "end": "28.02.2023 10:00:00"
        }
    ]
    Ответ написан
    Комментировать