真夜中過ぎに開いている飲酒バーのリストがあるAPIを構築しています。それらが現在開いているか閉じているかを確認するのに問題があります。
たとえば、これらのバーの 1 つの営業時間が次のようになっているとします。
Monday
open time = 20:00
closed time = 05:00
Tuesday
open time = 20:00
closed time = 04:00
バーが現在開いているかどうか、現在の時刻が 04:00 (月曜日が火曜日に進む) かどうかを知りたい場合、火曜日と閉店時間 = 04:00 であるため、現在のバーは閉まっているという結果になります。
しかし、実際の結果は、バーが 05:00 まで開いていることです (月曜日が火曜日に変わります)。
現在開いているか閉じているかを知る必要がある 20 以上のバーのリストがあります。これは mysql または php で実現できますか? データベーステーブルをどのようにセットアップすればよいですか?
私はこれを現在のセットアップとして持っています
テーブル名: openhours フィールド:
id int(11)
bar_id int(11)
open_time time
close_time time
day tinyint(1)
テーブル レコード:
id: 1
bar_id: 1
open_time: 20:00:00
closed_time: 05:00:00
day: 0
id: 2
bar_id: 1
open_time: 20:00:00
closed_time: 04:00:00
day: 1
このクエリは、午前 0 時を過ぎない営業日には正常に機能します
SELECT `open_time`, `closed_time`, IF(CURTIME() BETWEEN `open_time`
AND `closed_time`,'open','closed') AS `status` FROM `openhours`
WHERE `day` = DATE_FORMAT(NOW(), '%w')
しかし、過去の真夜中の問題についてどうすればいいですか?
このようなことを試みましたが、まったく正しくありません
SELECT open_time, close_time, day, (CASE WHEN ((open_time <= close_time
AND open_time <= CURTIME() AND close_time >= CURTIME()) OR (open_time >= close_time
AND (CURTIME() <= close_time OR CURTIME() >= open_time))) THEN 'open' ELSE 'closed'
END) AS status FROM openhours WHERE bar_id = 2 and CASE WHEN (day = WEEKDAY(NOW())
AND (CURTIME() < open_time)) THEN CASE WHEN (day = (WEEKDAY(NOW()) - 1)
AND (CURTIME() < close_time)) THEN day = (WEEKDAY(NOW()) - 1)
ELSE day = WEEKDAY(NOW()) END ELSE day = WEEKDAY(NOW()) END
前もって感謝します!