Всем спасибо. Вот мое решение:
/**
* @param string $from начало периода
* @param string $to конец периода
*
* @return array
*/
function getWeekPeriod($from, $to)
{
$weeks = [];
$from = strtotime($from);
$to = strtotime($to);
while ($from < $to) {
// echo "from:\t", date('d.m.Y', $from), RN;
// номер дня недели начала периода
$fromDay = date("N", $from);
// echo "fromDay:\t", $fromDay, RN;
// если не ВС
if ($fromDay < 7) {
// кол-во дней до ВС
$daysToSun = 7 - $fromDay;
// echo "daysToSun:\t", $daysToSun, RN;
// конец недельного периода
$end = strtotime("+ $daysToSun day", $from);
// если попадаем на след. месяц, то делаем новые вычисления
if (date("n", $from) != date("n", $end)) {
$end = strtotime("last day of this month", $from);
}
$weeks[] = [date('d.m.Y', $from), date('d.m.Y', $end)];
$from = $end;
} else {
$weeks[] = [date('d.m.Y', $from), date('d.m.Y', $from)];
}
// echo "end:\t", date('d.m.Y', $from), RN, RN;
$from = strtotime("+1 day", $from);
}
return $weeks;
}