PHP:生成带有打开和关闭时间的 Carbon 数组(每天)

PHP: Generate Carbon array with opening and closing times (per day)

想要的结果

我想要一个关联数组,其中包含一个间隔为 15 分钟的时间范围(在开始时间和结束时间之间)。例如:

[
    '2017-01-16' => [ // Start of the week (Monday)
        '08:00', // Opening time
        '08:15',
        '08:30',
        // Etc..
        '18:00', // Closing time
    ],
    '2017-01-17' => [ // Tuesday
        '10:00', // Opening time
        '10:15',
        '10:30',
        // Etc..
        '22:00', // Closing time
    ],

    // For every day in the week.
];

我希望能够做的另一件事是:取一个时间范围(例如 09:00 - 10:00)并将其从数组中删除(在特定日期键)

我的步骤(到目前为止)

我有一个数组,看起来和上面的一样。但是.. 它以 00:00 开始并在 23:45 结束。使用以下代码(主要来自 Whosebug 上的另一个问题):

private function generateDateRange(Carbon $start_date, Carbon $end_date)
{
    $dates = [];

    while ($start_date->lte($end_date)) {

        if(! array_key_exists($start_date->format('Y-m-d'), $dates)) {
            $dates[$start_date->format('Y-m-d')] = [];
        } else {

            array_push($dates[$start_date->format('Y-m-d')], $start_date->format('H:i'));

            if(in_array($start_date->format('H:i'), $dates[$start_date->format('Y-m-d')])) {
                $start_date->addMinutes(15);
            } else {
                $start_date->addDay();
            }


        }
    }

    return $dates;
}

$start = Carbon::now()->startOfWeek();
$end = Carbon::now()->endOfWeek();

$range = $this->generateDateRange($start, $end);

我的问题

如何在 PHP (Laravel) 中执行此操作?我打算通过使用数据库使这个(更多)动态。但首先我要有一个工作基础。

有人知道我可以做些什么来达到预期的结果吗?

试试这个:

private function generateDateRange(Carbon $start_date, Carbon $end_date,$slot_duration = 15)
{
    $dates = [];
    $slots = $start_date->diffInMinutes($end_date)/$slot_duration;

    //first unchanged time
    $dates[$start_date->toDateString()][]=$start_date->toTimeString();

    for($s = 1;$s <=$slots;$s++){

        $dates[$start_date->toDateString()][]=$start_date->addMinute($slot_duration)->toTimeString();

    }

    return $dates;
}