Php 午夜后开放时间
我正在制作一个api,在那里我有一个午夜后开放的酒吧列表。 我无法确定它们当前是打开还是关闭 例如,假设其中一家酒吧的营业时间如下:Php 午夜后开放时间,php,mysql,database,time,Php,Mysql,Database,Time,我正在制作一个api,在那里我有一个午夜后开放的酒吧列表。 我无法确定它们当前是打开还是关闭 例如,假设其中一家酒吧的营业时间如下: Monday open time = 20:00 closed time = 05:00 Tuesday open time = 20:00 closed time = 04:00 如果我想知道某个酒吧当前是否开放且当前时间为04:00(星期一到星期二),这将导致当前酒吧关闭,因为它是星期二且关闭时间=04:00 但实际结果应该是酒吧营业到05:00(周一
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中实现吗?我应该如何设置我的db表
我有这个作为我的当前设置
表名:开放时间
字段:
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
此查询适用于不超过午夜的开放日
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
选择打开时间、关闭时间、日期(案例时间)((打开时间=关闭时间
和(CURTIME()=open_time)))然后“打开”或“关闭”
结束)作为打开时间的状态,其中bar_id=2,CASE WHEN(day=WEEKDAY(NOW())
和(CURTIME()
提前谢谢 您可以使用UNIX_TIMESTAMP()解决此类问题:
SELECT `open_time`, `closed_time`, IF(UNIX_TIMESTAMP(CURTIME()) BETWEEN UNIX_TIMESTAMP(`open_time`) AND UNIX_TIMESTAMP(`closed_time`),'open','closed') AS `status` FROM `openhours` WHERE `day` = DATE_FORMAT(NOW(), '%w')
我希望我明白你的意思:)你想要这样的东西吗
case closed < open
not between open and closed
else
between open and closed
案例关闭
当其中一个返回true时,该栏打开一个选项是存储一周开始后的秒数,这样你就根本不需要担心午夜 将这些添加到您的表中:
open_time_i int(11)
closed_time_i int(11)
并使您的数据如下所示:
id: 1
bar_id: 1
open_time: 20:00:00
open_time_i: 72000
closed_time: 05:00:00
closed_time_i: 104400
day: 0
id: 2
bar_id: 1
open_time: 20:00:00
open_time_i: 158400
closed_time: 04:00:00
closed_time_i: 187200
day: 1
然后,您的查找可能如下所示:
$seconds = time() - strtotime('this week last sunday', date("Y-m-d", time()))
SELECT `open_time`, `closed_time`, IF(
$seconds BETWEEN `open_time_i` AND `closed_time_i`
OR
(("closed_time_i" >= 604800 AND $seconds BETWEEN 0 AND ("closed_time_i" - 604800)))
,'open','closed') AS `status` FROM `openhours`
第二条中间语句检查酒吧是否在这一周的变动后开放。是的,它可以。。您只需要具有正确的功能。我想您应该提供更多信息,例如您的模式、示例数据和给定特定时间的预期输出。您可以使用UNIX\u时间戳函数解决这一问题:问题在于获得正确的打开和关闭时间。如果酒吧周一营业到周二早上5点,那么我就不得不选择周一的营业时间而不是周二。那么我要用另一种方式设置数据库吗?我不知道UNIX\u时间戳(打开时间)或UNIX\u时间戳(关闭时间)如何都返回0