Php 一种存储开放时间的方法,用于确定某个场所现在是否开放
我希望能够记录多家餐厅的营业时间,并确定一家店现在是否开门,但我一直在思考如何处理午夜后关门的地方 以下是一家餐厅的营业时间示例: 我不确定我应该使用什么类型的模式来表示这一点,以使我能够确定某个特定的餐厅现在是否营业 设置模式后,我的目标是能够为任何特定餐厅确定以下内容:Php 一种存储开放时间的方法,用于确定某个场所现在是否开放,php,mysql,database,schema,Php,Mysql,Database,Schema,我希望能够记录多家餐厅的营业时间,并确定一家店现在是否开门,但我一直在思考如何处理午夜后关门的地方 以下是一家餐厅的营业时间示例: 我不确定我应该使用什么类型的模式来表示这一点,以使我能够确定某个特定的餐厅现在是否营业 设置模式后,我的目标是能够为任何特定餐厅确定以下内容: Restaurant 1 Monday: 6:00AM-10:00PM Tuesday: 6:00AM-10:00PM Wednesday: 6:00AM-10:00PM Thursday: 6:00AM-10:00PM F
Restaurant 1
Monday: 6:00AM-10:00PM
Tuesday: 6:00AM-10:00PM
Wednesday: 6:00AM-10:00PM
Thursday: 6:00AM-10:00PM
Friday: 6:00AM-11:59PM
Saturday: 0:00AM-3:00AM, 6:00AM-11:59PM
Sunday: 0:00AM-3:00AM, 6:00AM-10:00PM
Current day/time -> Result
Monday 12:00PM -> Open
Monday 2:00AM -> Closed
Monday 5:45AM -> Open
Monday 9:30PM -> Closed
Saturday 4:00AM -> Closed
Saturday 11:55PM -> Open
Sunday 2:00AM -> Open
Sunday 2:25AM -> Closed
- 餐厅是否会在15分钟后营业
- 餐厅是否会在45分钟后关门
Restaurant 1
Monday: 6:00AM-10:00PM
Tuesday: 6:00AM-10:00PM
Wednesday: 6:00AM-10:00PM
Thursday: 6:00AM-10:00PM
Friday: 6:00AM-11:59PM
Saturday: 0:00AM-3:00AM, 6:00AM-11:59PM
Sunday: 0:00AM-3:00AM, 6:00AM-10:00PM
Current day/time -> Result
Monday 12:00PM -> Open
Monday 2:00AM -> Closed
Monday 5:45AM -> Open
Monday 9:30PM -> Closed
Saturday 4:00AM -> Closed
Saturday 11:55PM -> Open
Sunday 2:00AM -> Open
Sunday 2:25AM -> Closed
我不确定我将如何处理过渡时间,例如,确定餐厅是否将在45分钟后的周六晚上11:55营业
以下是餐厅营业时间的另一个例子:
周六商店24小时营业,所以我也需要处理这个案子
餐厅可以全天候营业:
餐厅每天可以有0、1、2或更多时段:
因此,我的目标是找到给定餐厅及其营业时间的当前时间是否介于以下时间之间:
Restaurant 1
Monday: 6:00AM-10:00PM
Tuesday: 6:00AM-10:00PM
Wednesday: 6:00AM-10:00PM
Thursday: 6:00AM-10:00PM
Friday: 6:00AM-11:59PM
Saturday: 0:00AM-3:00AM, 6:00AM-11:59PM
Sunday: 0:00AM-3:00AM, 6:00AM-10:00PM
Current day/time -> Result
Monday 12:00PM -> Open
Monday 2:00AM -> Closed
Monday 5:45AM -> Open
Monday 9:30PM -> Closed
Saturday 4:00AM -> Closed
Saturday 11:55PM -> Open
Sunday 2:00AM -> Open
Sunday 2:25AM -> Closed
- 开业前15分钟,以及
- 闭幕前45分钟
- 当天任何时间
由于每天可能有0个或多个句点,我认为每行存储1个句点是有意义的,但除此之外,我不确定如何进行存储。我想我可能会尝试以这种方式存储它:
bit_code opens closes
69 06:00:00 22:00:00
48 06:00:00 03:00:00
我用数字表示了一周中的几天,如下所示:
Monday - 1
Tuesday - 2
Wednesday - 4
Thursday - 8
Friday - 16
Saturday - 32
Sunday - 64
那么,星期五+星期六=48
编辑:
考虑以下示例:
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(weekday_code INT NOT NULL
,opens TIME NOT NULL
,closes TIME NOT NULL
);
INSERT INTO my_table VALUES
(69,'06:00:00','22:00:00'),
(48,'06:00:00','03:00:00');
现在是23:30:00。我想下面将告诉我们餐厅目前每周开放的几天(考虑到15分钟和45分钟的规则)
选择*
从我的桌子上
演员位置('23:30:00'作为时间)>=开始-间隔15分钟
和CAST('23:30:00'作为时间)实际上,很明显,关门时间比开门时间晚(而且这些餐厅从不24小时营业),所以你可以按原样储存(没有+1)。或者,您可以存储打开的时间和持续时间,如果这更有意义的话。位代码是什么?至于第二排,我是否知道因为关门时间比开门时间短,所以关门时间是第二天?如果我这样存储,现在是星期六凌晨2点,那么我需要检查星期五的时间吗?你想回答什么问题?考虑到这个地方的开放时间,确定当前时间是否在开放前15分钟和关闭前45分钟内。由于滚动,我不确定如何存储/计算它。它看起来很棒,我现在正在尝试实现它。我不知道你可以用SQL做这样的事情。我说的对吗,它在周日的02:00:00不工作?
Monday - 1
Tuesday - 2
Wednesday - 4
Thursday - 8
Friday - 16
Saturday - 32
Sunday - 64
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(weekday_code INT NOT NULL
,opens TIME NOT NULL
,closes TIME NOT NULL
);
INSERT INTO my_table VALUES
(69,'06:00:00','22:00:00'),
(48,'06:00:00','03:00:00');
SELECT *
FROM my_table
WHERE CAST('23:30:00' AS TIME) >= opens - INTERVAL 15 MINUTE
AND CAST('23:30:00' AS TIME) <= (CASE WHEN closes < opens THEN closes + INTERVAL 24 HOUR ELSE closes END) - INTERVAL 45 MINUTE;
+--------------+----------+----------+
| weekday_code | opens | closes |
+--------------+----------+----------+
| 48 | 06:00:00 | 03:00:00 |
+--------------+----------+----------+
SELECT a.x
FROM
( SELECT 1 x UNION
SELECT 2 UNION
SELECT 4 UNION
SELECT 8 UNION
SELECT 16 UNION
SELECT 32 UNION
SELECT 64
) a
JOIN my_table b
ON a.x = ( a.x & b.weekday_code)
AND CAST('23:30:00' AS TIME) >= b.opens - INTERVAL 15 MINUTE
AND CAST('23:30:00' AS TIME) <= (CASE WHEN b.closes < b.opens THEN b.closes + INTERVAL 24 HOUR ELSE b.closes END) - INTERVAL 45 MINUTE;
+----+
| x |
+----+
| 16 |
| 32 |
+----+