Я почти уверен, что слишком усложняю это, но я понятия не имею, как сделать это по-другому.
Я хочу создать массив, который содержит номер недели в месяце в качестве ключа и дни этой недели в качестве значения.
Я использую эту функцию, чтобы получить все дни недели:
public function getDaysOfWeek($year, $month, $day)
{
$firstMondayThisWeek = new DateTime($year . '/' . $month . '/' . $day, new DateTimeZone("Europe/Berlin"));
$firstMondayThisWeek->modify('tomorrow');
$firstMondayThisWeek->modify('last Monday');
$nextSevenDays = new DatePeriod(
$firstMondayThisWeek,
DateInterval::createFromDateString('+1 day'),
6
);
return $nextSevenDays;
}
И эта функция для построения массива:
public function getWeekAndDays($year, $month)
{
$weeksInMonth = Carbon::createFromDate($year, $month)->endOfMonth()->weekOfMonth;
$weekBegin = Carbon::createFromDate($year, $month)->startOfMonth();
$weeks = [];
for($i=1; $i<=$weeksInMonth; $i++)
{
$collection = new \stdClass();
$collection->week = $i;
$collection->days = $this->getDaysOfWeek($year, $month, $weekBegin->day);
$weekBegin->addWeek(0);
$weeks[] = $collection;
}
return $weeks;
}
За все месяцы, кроме февраля, я получаю 5 недель. На февраль у меня есть 4 недели, поэтому я не могу сохранить перекрывающиеся дни месяца.
Я здесь совсем не прав? Каков возможный путь решения этой задачи?