餐厅早餐,午餐,晚餐多次之间的时间

I'm trying to calculate if the current time is within the opening hours of a restaurant.

This is online ordering system. So users needs to select the delivery time. The restaurant has the following opening and closing times:

Monday   11am-2:30pm   5:30pm-10pm
CLOSED TUESDAYS
Wednesday  11am-2:30pm   5:30pm-10pm
Thursday  11am-2:30pm   5:30pm-10pm
Friday  11am-2:30pm   5:30pm-12am
Saturday  11:30am-3pm   5:30pm-12am
Sunday  11:30am-3pm   5:30pm-10pm

I have to show a select box to select the delivery time within this time range.

I am using this script for single time. How can i use for multiple opening timings?

$start = new DateTime(); 
$start->setTime($start->format('H'), ceil($start->format('i') / 45) * 45);
$end = new DateTime('22:00:00');
$i=1;
while ($start <= $end) {
    if($i==1){
        echo '<option>' . $start->format('g:i a') . '</option>', "
";
    }else{
        echo '<option>' . $start->format('g:i a') . '</option>', "
";
    }
    $start->modify('+30 minute');
 $i++;
}

By using an multidimentional array, you could easily add the time frame your need:

$open = array(
    "Monday" => array(
        0 => array(
            "begin" =>  "11:00 am",
            "end" =>    "02:30 pm"
        ),
        1 => array(
            "begin" =>  "05:30 pm",
            "end" =>    "10:00 pm"
        )
    ),

    "Wednesday" => array(
        0 => array(
            "begin" =>  "11:00 am",
            "end" =>    "02:30 pm"
        ),
        1 => array(
            "begin" =>  "05:30 pm",
            "end" =>    "10:00 pm"
        )
    ),  

    "Thursday" => array(
        0 => array(
            "begin" =>  "11:00 am",
            "end" =>    "02:30 pm"
        ),
        1 => array(
            "begin" =>  "05:30 pm",
            "end" =>    "10:00 pm"
        )
    ),

    "Friday" => array(
        0 => array(
            "begin" =>  "11:00 am",
            "end" =>    "02:30 pm"
        ),
        1 => array(
            "begin" =>  "05:30 pm",
            "end" =>    "12:00 am + 1day"
        )
    ),

    "Saturday" => array(
        0 => array(
            "begin" =>  "11:00 am",
            "end" =>    "03:00 pm"
        ),
        1 => array(
            "begin" =>  "05:30 pm",
            "end" =>    "12:00 am + 1day"
        )
    ),

    "Sunday" => array(
        0 => array(
            "begin" =>  "11:00 am",
            "end" =>    "03:00 pm"
        ),
        1 => array(
            "begin" =>  "05:30 pm",
            "end" =>    "10:00 pm"
        )
    )
);

And with a loop you can iterate through it and generate your 30 minutes delivery time.

foreach($open as $day => $hours)
{
    echo $day . "<br>";

    for($j = 0; $j < count($hours); $j++)
    {
        $start = new DateTime($hours[$j]['begin']); 
        $end = new DateTime($hours[$j]['end']);
        echo "<br>";
        $i=1;
        while ($start <= $end) {
            if($i==1){
                echo '<option>' . $start->format('g:i a') . '</option>', "
";
            }else{
                echo '<option>' . $start->format('g:i a') . '</option>', "
";
            }
            $start->modify('+30 minute');
         $i++;
        }
    }

    echo "<br>";
}

The result for this will be:

Monday

11:00 am 11:30 am 12:00 pm 12:30 pm 1:00 pm 1:30 pm 2:00 pm 2:30 pm

5:30 pm 6:00 pm 6:30 pm 7:00 pm 7:30 pm 8:00 pm 8:30 pm 9:00 pm 9:30 pm 10:00 pm

Wednesday

11:00 am 11:30 am 12:00 pm 12:30 pm 1:00 pm 1:30 pm 2:00 pm 2:30 pm

5:30 pm 6:00 pm 6:30 pm 7:00 pm 7:30 pm 8:00 pm 8:30 pm 9:00 pm 9:30 pm 10:00 pm

Thursday

11:00 am 11:30 am 12:00 pm 12:30 pm 1:00 pm 1:30 pm 2:00 pm 2:30 pm

5:30 pm 6:00 pm 6:30 pm 7:00 pm 7:30 pm 8:00 pm 8:30 pm 9:00 pm 9:30 pm 10:00 pm

Friday

11:00 am 11:30 am 12:00 pm 12:30 pm 1:00 pm 1:30 pm 2:00 pm 2:30 pm

5:30 pm 6:00 pm 6:30 pm 7:00 pm 7:30 pm 8:00 pm 8:30 pm 9:00 pm 9:30 pm 10:00 pm 10:30 pm 11:00 pm 11:30 pm 12:00 am

Saturday

11:00 am 11:30 am 12:00 pm 12:30 pm 1:00 pm 1:30 pm 2:00 pm 2:30 pm 3:00 pm

5:30 pm 6:00 pm 6:30 pm 7:00 pm 7:30 pm 8:00 pm 8:30 pm 9:00 pm 9:30 pm 10:00 pm 10:30 pm 11:00 pm 11:30 pm 12:00 am

Sunday

11:00 am 11:30 am 12:00 pm 12:30 pm 1:00 pm 1:30 pm 2:00 pm 2:30 pm 3:00 pm

5:30 pm 6:00 pm 6:30 pm 7:00 pm 7:30 pm 8:00 pm 8:30 pm 9:00 pm 9:30 pm 10:00 pm