确定商店是否开放?
在PHP和MySQL中 - 如何确定商店是打开还是关闭(返回true或false)?
如果商店关闭,如何获得下一个营业时间?
Opening_Hours
表的例子:
+----+---------+----------+-----------+------------+---------+
| id | shop_id | week_day | open_hour | close_hour | enabled |
+----+---------+----------+-----------+------------+---------+
| 1 | 1 | 1 | 16:30:00 | 23:30:00 | 1 |
| 2 | 1 | 2 | 16:30:00 | 23:30:00 | 1 |
| 3 | 1 | 3 | 16:30:00 | 23:30:00 | 0 |
| 4 | 1 | 4 | 16:30:00 | 23:30:00 | 1 |
| 5 | 1 | 5 | 10:00:00 | 13:00:00 | 1 |
| 6 | 1 | 5 | 17:15:00 | 00:30:00 | 1 |
| 7 | 1 | 6 | 17:15:00 | 01:30:00 | 1 |
| 8 | 1 | 7 | 16:30:00 | 23:30:00 | 0 |
+----+---------+----------+-----------+------------+---------+
open_hour
和close_hour
是TIME类型的字段。 表设计好吗?
当前时间的例子:
当前时间 :星期二23:00, - 产出 :开放,'在星期二16:30 - 23:30开放'
当前时间 :星期二23:40, - 输出 :关闭,'在周四16:30 - 23:30开放'
周四开放,因为Opening_Hours.week_day = 3
已禁用
现在如何处理午夜时间? 这变得更加复杂。
正如你所看到的,星期六( Opening_Hours.week_day = 5
),它从下午17:15开放到01:30(第二天星期日休息)
如果当前时间是星期日上午01:15,则商店仍将基于Opening_Hours.week_day = 5
打开。
输出 :开放,'星期六17:15 - 01:30开放'
在过去,我通过使用没有日期的时间戳(自午夜以来的秒数)来处理这个问题。 因此,周六开盘价为62100
,收盘91800
为91800
。
我的想法是,在接近午夜时删除一些所需的逻辑,因为您只需比较从日期开始到时间范围的秒数。
而且很容易检查它是否仍然从'昨天'开启 - 只需在当前'时间'(从一天开始以来的秒数)中添加86400
,并与前一天进行核对。
可能全部是单个SQL语句。
您可以使用PHP date()函数并将其与开放时间进行比较。
你可以做这样的递归函数(不工作PHP代码,但PHP与伪代码结合):
/* $current_time should be in the format of date("His") */
function check_hours($current_day, $current_time)
{
Get the MySQL row for today here
if (Opening_Hours.enabled == 1 WHERE Opening_Hours.week_day == $current_day)
{
if ((date("His") >= Opening_Hours.open_hour) and ($current_time <= Opening_Hours.close_hour))
{
// convert_numeric_day_to_full_representation isn't a real function! make one
return 'Open: ' . convert_numeric_day_to_full_representation($current_day) . ' ' . Opening_Hours.open_hour . ' – ' . Opening_Hours.close_hour;
}
elseif (date("His") < Opening_Hours.open_hour)
{
return 'Closed: Next opening hours: ' . convert_numeric_day_to_full_representation($current_day) . ' ' . Opening_Hours.open_hour . ' – ' . Opening_Hours.close_hour;
}
else
{
return check_hours($tomorrow, '000000');
}
}
else
{
return check_hours($tomorrow, '000000');
}
}
链接地址: http://www.djcxy.com/p/57991.html