确定商店是否开放?

在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_hourclose_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 ,收盘9180091800

    我的想法是,在接近午夜时删除一些所需的逻辑,因为您只需比较从日期开始到时间范围的秒数。

    而且很容易检查它是否仍然从'昨天'开启 - 只需在当前'时间'(从一天开始以来的秒数)中添加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

    上一篇: Determine if the store is open?

    下一篇: Presenting a specific view controller from AppDelegate