php打开每日狂暴

时间:2016-02-13 20:48:25

标签: php time

我正在建立餐厅服务,目前我不知道如何展示像谷歌商业这样开放的日常餐厅。

我有桌面设计

+-----+----------+------+----------+----------+
| ref | id_resto | day  | open     | close    |
+-----+----------+------+----------+----------+
|   2 |        5 |    1 | 13:00:00 | 21:00:00 |
|   5 |        5 |    2 | 13:00:00 | 21:00:00 |
|   7 |        5 |    3 | 13:00:00 | 21:00:00 |
|   9 |        5 |    4 | 13:00:00 | 21:00:00 |
|  10 |        5 |    6 | 13:00:00 | 22:00:00 |
|  11 |        5 |    7 | 14:00:00 | 21:00:00 |
+-----+----------+------+----------+----------+

第7天=星期日,1 =星期一,2 =星期二,3 =星期三和soo

根据我的表格,它应该显示

Monday-Thursday 13:00 - 21:00
Saturday 13:00 - 22:00
Sunday 14:00 - 21:00

我尝试了一些算法,但注意到了--_- 任何的想法? 感谢

1 个答案:

答案 0 :(得分:0)

对表结构进行少量更改后,实现起来应该很简单。

以下是我创建表格的代码:

CREATE TABLE `daytype` (
  `id` int(11) NOT NULL,
  `description` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
);
INSERT INTO `daytype` VALUES (1,'Monday - Thursday'),(2,'Saturday'),(3,'Sunday');

CREATE TABLE `hours` (
  `ref` int(11) NOT NULL,
  `id_resto` int(11) DEFAULT NULL,
  `id_daytypes` int(11) DEFAULT NULL,
  `open` char(5) DEFAULT NULL,
  `close` char(5) DEFAULT NULL,
  PRIMARY KEY (`ref`)
);

INSERT INTO `hours` VALUES (2,5,1,'13:00','21:00'),(5,5,2,'13:00','21:00'),(7,5,3,'14:00','21:00');

然后,您可以通过简单的连接轻松获得所需的数据:

SELECT d.description, CONCAT(open, ' - ', close) as hours FROM test.hours AS h INNER JOIN daytype AS d ON (d.id = h.id_daytypes);

输出:

Output containing business hours

如果需要,此结构还有一个额外的好处,即允许您为每个餐厅设置不同的休息时间和不同的显示。例如,如果一家餐馆在星期一有不同的小时数,您可以在星期一和星期二到星期四的日式表中添加一个条目。

总的来说,这应该可以节省一些空间,因为您不需要为每个相同的日子输入重复信息。

希望这有助于您开始使用。

更新:根据请求,这是一个如何检查今天是否有东西打开的例子。

你可以有一个php函数,它返回当天所有有效日型的逗号分隔列表。像这样:

<?php

/*
1   Monday - Thursday
2   Saturday
3   Sunday
4   Friday
5   Monday
*/

function getDayType()
{
    $dayOfWeek = date('l');
    switch($dayOfWeek)
    {
        case "Monday":
            return "1, 5"
        case "Tuesday":
        case "Wednesday":
        case "Thursday":
            return "1";
        case "Friday":
            return "4":
        case "Saturday":
            return "2";
        case "Sunday":
            return "3"
    }
}

然后很容易确定今天开放的商店。

例如,像这个将返回所有开放餐厅的查询。

SELECT 
    h.id_resto
FROM
    test.hours AS h
        INNER JOIN
    daytype AS d ON (d.id = h.id_daytypes)
WHERE
    id_daytypes IN (1 , 5)
    AND (
            (HOUR(NOW()) > HOUR(open) AND HOUR(NOW()) < HOUR(close))
        OR 
            (HOUR(NOW()) = HOUR(open) AND MINUTE(NOW()) >= MINUTE(open))
        OR
            (HOUR(NOW()) = HOUR(close) AND MINUTE(NOW()) < MINUTE(close))
    );