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