在 Carbon 中列出从周一到周日的月份中的几周

List weeks in month from Monday to Sunday in Carbon

我正在尝试使用 PHP 的 Carbon 库从一个月中获取所有星期和工作日。我想组成一个数组,比方说当月,是这样的:

array(
    'April' => array(
        array(
            '2017-04-03',  // Monday
            '2017-04-04',  // Tuesday
            '2017-04-05',  // Wednesday
            '2017-04-06',  // Thursday
            '2017-04-07',  // Friday
            '2017-04-08',  // Saturday
            '2017-04-09',  // Sunday
        ),

        array(
            '2017-04-10',  // Monday
            '2017-04-11',  // Tuesday
            '2017-04-12',  // Wednesday
            '2017-04-13',  // Thursday
            '2017-04-14',  // Friday
            '2017-04-15',  // Saturday
            '2017-04-16',  // Sunday
        ),

        array(
            '2017-04-17',  // Monday
            '2017-04-18',  // Tuesday
            '2017-04-19',  // Wednesday
            '2017-04-20',  // Thursday
            '2017-04-21',  // Friday
            '2017-04-22',  // Saturday
            '2017-04-23',  // Sunday
        ),

        array(
            '2017-04-24',  // Monday
            '2017-04-25',  // Tuesday
            '2017-04-26',  // Wednesday
            '2017-04-27',  // Thursday
            '2017-04-28',  // Friday
            '2017-04-29',  // Saturday
            '2017-04-30',  // Sunday
        ),
    ),
);

我试过这个:

for($i = 1; $i <= 4; $i++) {
    $carbon = new Carbon(new Carbon('2017-04-03'), 'Europe/Sarajevo');
    $model[] = $carbon->addWeeks($i);
}

但由于我手动设置了日期,所以无法满足我的需求。当然,我可以利用 strtotime('First Monday of MonthName Year'); 的强大功能,但这并不能帮助我找出组成周数组的逻辑,就像我上面描述的那样。


编辑: 基本上,我想要的是列出从给定月份的第一个星期一到最后一个星期日的所有星期,即。当前,并将其组合成我上面描述的数组。

你可以试试这个:

$month = "04";
$carbon = new Carbon(new Carbon(date('Y-m-d', strtotime('next monday', strtotime('2017-' . $month . '-01'))), 'Europe/Sarajevo');
$weeks_array = [];

while (intval($carbon->month) == intval($month)){
    $week_array[$carbon->weekOfMonth][ $carbon->dayOfWeek ] = $carbon->toDateString();
    $carbon->addDay();
}