在PHP和MySQL中 - 如何确定Store是打开还是关闭(返回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开放'
< / LI>当前时间:星期二23:40, - 输出:关闭,'在16:30 - 23:30开放'
< / LI>周四开放,因为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开放'
答案 0 :(得分:3)
过去,我通过使用没有日期的时间戳(午夜后的秒数)处理了这个问题。因此,对于星期六,开放时间为62100
,收盘价为91800
。
我的想法是,这会消除当一个收盘越过午夜时所需的一些逻辑,因为你只需要比较从日期开始到时间范围的秒数。
我们很容易检查它是否仍然在昨天开放#&#39; - 只需将86400
添加到当前&#39;时间&#39; (自当天开始以来的秒数)并检查前一天。
可能只是一个SQL语句。
答案 1 :(得分:1)
您可以使用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');
}
}