我有一个包含每日菜,开放时间和关闭时间的数据库。
我正在寻找的是一种检查时间是否在这些时间内的方法,例如:
开放时间: 14:00
结束时间:02:00 < - (请注意,过了00:00)
如果时间可能是从00:00到23:59,这个问题将非常容易解决(我只会检查当天的当前时间是否在这些时间内)。
但事实并非如此,因为这一天已经改变了,所以昨天的时间不会被检查,这意味着在02:00关闭的餐厅将不会被退回。
以下是我如何在PHP中声明日期开启/关闭时间的名称,用于查询:
$day_open = array('d1_o', 'd2_o', 'd3_o', 'd4_o', 'd5_o', 'd6_o', 'd7_o');
$day_close = array('d1_c', 'd2_c', 'd3_c', 'd4_c', 'd5_c', 'd6_c', 'd7_c');
// This is the name of the week days dishes
$dish_dd_array = array('d1_t', 'd2_t', 'd3_t', 'd4_t', 'd5_t', 'd6_t', 'd7_t');
$weekday = date('N'); // This returns 1 for monday, 5 for friday etc..
$current_time = date("H:i", time());
$query = mysql_query("SELECT {$dish_dd_array[$weekday-1]} FROM restaurants WHERE (({$day_open[$weekday-1]} < {$day_close[$weekday-1]} AND '{$current_time}' BETWEEN {$day_open[$weekday-1]} AND {$day_close[$weekday-1]}) OR ".
"({$day_open[$weekday-1]} > {$day_close[$weekday-1]} AND ('{$current_time}' > {$day_open[$weekday-1]} OR '{$current_time}' < {$day_close[$weekday-1]})))");
查询有点长,所以我会在这里解释一下:
它只检查当前时间是否在数据库中当前开启/关闭时间内。如果是,它将返回菜肴。
只是为了澄清,如果时间范围在同一天的00:00和23:59之间,这段代码可以完美运行,但是我希望在24:00之后支持甚至时间,所以夜间餐厅也可以看到!
提前致谢,
通帕
答案 0 :(得分:0)
如果结束时间
,我在这里做的是添加一个条件AM 或 PM
如果是AM,则结束时间是第二天的那个时间。当PM认为它是同一天。在同一天的AM中关闭时间非常 RARE 。
或 ELSE 您应该添加 FLAG (数据库中具有true或false值的列或您的设置文件中的列)以确定关闭时间是否在相同或第二天。
答案 1 :(得分:0)
请记住,午夜是我们仅仅是人类的利益的任意区分。在一个时间间隔内没有午夜这样的事情。因此,如果我们看到的时间是周一开盘时间或周二开盘时间之后,我们可以安全地假设它是在周一营业时间。你甚至不需要关闭时间。
WHERE '{$current_time}' >= {$day_open[$weekday-1]}
AND '{$current_time}' < {$day_open[$weekday]})