【问题标题】:Determine if the store is open?确定商店是否营业?
【发布时间】:2012-03-03 12:38:10
【问题描述】:

在 PHP 和 MySQL 中——如何判断 Store 是 Open 还是 Close(返回 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,-输出:打开,'Open at Tue 16:30 - 23:30'

  • 当前时间:星期二 23:40,-输出:关闭,'Open at Thu 16:30 - 23:30'

周四开放,因为 Opening_Hours.week_day = 3 已停用


现在如何处理午夜时间?这变得更复杂了。

如您所见,周六 (Opening_Hours.week_day = 5) 营业时间为下午 17:15 至 01:30(次日周日关闭)

如果当前时间是周日上午 1 点 15 分,那么商店仍然会在Opening_Hours.week_day = 5 营业。

输出:打开,“周六 17:15 - 01:30 打开”

【问题讨论】:

  • 请不要一次发布多个问题。把你的问题分解成更小的部分并询问细节。这看起来像家庭作业,在这里不受欢迎......
  • @JanHančič 这不是一次多个问题。我的问题是如何找出商店是开着还是关着。其次,这不是家庭作业。
  • 对我来说这看起来像是家庭作业,但如果你说不是,那么我相信你:)

标签: php mysql database-design strtotime


【解决方案1】:

过去,我通过使用不带日期的时间戳(自午夜以来的秒数)来处理此问题。所以周六,开盘是62100,收盘是91800

我的想法是,这消除了收盘价跨越午夜时所需的一些逻辑,因为您只需比较自日期开始以来的秒数与时间范围。

而且很容易检查它是否从“昨天”开始仍然开放 - 只需将 86400 添加到当前“时间”(自一天开始以来的秒数)并检查前一天。

可能都是一条 SQL 语句。

【讨论】:

    【解决方案2】:

    您可以使用 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');
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      相关资源
      最近更新 更多