我正在尝试计算当前时间是否在餐厅的营业时间内。
这个问题在 Stackoverflow 上被问了很多,但我还没有找到一个可以解释我遇到的问题的问题。此外,很高兴看到有更好的方法来做到这一点。
目前,如果当天关闭(本例中为星期日)或“星期六”凌晨 1 点(从技术上讲是星期天早上 1 点),它会中断。我有一种感觉,我必须改变数据的存储方式,以解决午夜之后的问题,但我正在尝试使用我现在拥有的东西。这是一个问题,因为大多数餐厅将特定日期的营业时间列为下午 5 点至凌晨 2 点,而不是下午 5 点至凌晨 12 点、凌晨 12 点至凌晨 2 点。
无论如何,这就是我所拥有的。请告诉我一个更好的方法来做到这一点。
我有这样存储的时间:
$times = array(
'opening_hours_mon' => '9am - 8pm',
'opening_hours_tue' => '9am - 2am',
'opening_hours_wed' => '8:30am - 2am',
'opening_hours_thu' => '5:30pm - 2am',
'opening_hours_fri' => '8:30am - 11am',
'opening_hours_sat' => '9am - 3pm, 5pm - 2am',
'opening_hours_sun' => 'closed'
);
这是我现在使用的代码:
// Get the right key for today
$status = 'open';
$now = (int) current_time( 'timestamp' );
$day = strtolower( date('D', $now) );
$string = 'opening_hours_'.$day;
$times = $meta[$string][0]; // This should be a stirng like '6:00am - 2:00am' or even '6:00am - 11:00am, 1:00pm to 11:00pm'.
// Does it contain a '-', if not assume it's closed.
$pos = strpos($times, '-');
if ($pos === false) {
$status = 'closed';
} else {
// Maybe a day has multiple opening times?
$seating_times = explode(',', $times);
foreach( $seating_times as $time ) {
$chunks = explode('-', $time);
$open_time = strtotime($chunks[0]);
$close_time = strtotime($chunks[1]);
// Calculate if now is between range of open and closed
if(($open_time <= $now) && ($now <= $close_time)) {
$status = 'open';
break;
} else {
$status = 'closed';
}
}
}