はじめに
レストランや飲み屋などの場合、営業時間が日付(午前0時)をまたぐケースが多くあります。そのようなケースで営業時間内であるか否かを判定する際の方法は、検索してもヒットが意外と少ない。「基本的なことでは?」といわれてしまえばその通りですが、備忘録としてPHPのコードを残しておこうと思います。
方法
お店の営業時間は、「18:00~3:00」のような形式で設定されますので、開店時間と閉店時間をそれぞれ $openTime と $closeTime とします。これらと現在の時間 $nowTime を比較すればよいのです。
$openTime と $closeTime が日付(午前0時)をまたがなければ、下記のコードになります。
$openTime = '18:00:00'; // 開店時間 $closeTime = '23:00:00'; // 閉店時間 $openTimeObj = new DateTime($openTime); $closeTimeObj = new DateTime($closeTime); $nowTimeObj = new DateTime(); if( $openTimeObj <= $nowTimeObj && $closeTimeObj >= $nowTimeObj ) { // 営業時間内 } else { // 営業時間外 }
日付(午前0時)をまたぐケースを考慮する場合、$openTime < $closeTime 、 $openTime > $closeTime 、 $openTime == $closeTime でわけての組み立てになります。
$openTime = '18:00:00'; // 開店時間 $closeTime = '03:00:00'; // 閉店時間 $openTimeObj = new DateTime($openTime); $closeTimeObj = new DateTime($closeTime); $nowTimeObj = new DateTime(); if( $openTimeObj < $closeTimeObj ) // 午前0時をまたがない営業時間の場合 { if( $openTimeObj <= $nowTimeObj && $closeTimeObj >= $nowTimeObj ) { // 営業時間内 } else { // 営業時間外 } } elseif( $openTimeObj > $closeTimeObj ) // 午前0時をまたぐ営業時間の場合 { if( $openTimeObj <= $nowTimeObj || $closeTimeObj >= $nowTimeObj ) { // 営業時間内 } else { // 営業時間外 } } else // 開店と閉店が同じ時間 { // 24時間営業? }
上記に「休店日」を考慮するともう少し複雑になります。