現在の時刻がレストランの営業時間内であるかどうかを計算しようとしています。
この質問はStackoverflowでよく聞かれますが、私が抱えている問題を説明できる質問は見つかりませんでした。また、これを行うためのより良い方法についてのアイデアを見るのもいいでしょう。
現在、その日が休業している場合(この例では日曜日)、または「土曜日」の午前1時(厳密には日曜日の朝の午前1時)に休憩します。深夜以降のデータの保存方法を変更する必要があると感じていますが、今のところは自分のデータで作業しようとしています。ほとんどのレストランでは、特定の日の営業時間が午後5時から午前12時、午前12時から午前2時ではなく、午後5時から午前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';
}
}
}