当前时间是否介于两个给定时间之间?
我正在尝试计算当前时间是否在餐厅的营业时间内。
这个问题在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';
}
}
}