php - 处理时间和午夜后

标签 php mysql sql

在 PHP/MySQL 中,您如何处理时间和午夜之后?

使用INT 存储分钟还是使用TIME 类型字段?

考虑下面的 SQL 查询:

SELECT * FROM opening_hours  
        WHERE week_day = WEEKDAY(NOW()) + 1 
              AND open_hour =< date_format(now(),'%H:%i') 
              AND close_hour >= date_format(now(),'%H:%i')

open_hour/close_hour 字段为TIME 类型字段。

假设open_time为“18:00”,close_time为“02:00”,当前时间为“22:41”。我们有一个单独的 close_time 数据库记录(因为它是在午夜之后),但我们永远不会在结果中得到它,因为 close_time“02:00”不大于当前时间“22:41”。

此外,如果当前时间是“01:00”,我们将获得下一天的值,因为工作日不匹配。

那么解决方案是什么?

您是否愿意将这些值存储在 INT(分钟)中,以便 php 能够直接处理这些值,而无需任何转换?

例如……

当前时间:

// w = Day of the week, H = 24-hour format, i = Minutes
$timearr = explode(':',date("w:H:i"));
$currenttime = ($timearr[0]) * 1440 + $timearr[1] * 60 + $timearr[2] 

在数据库中,以分钟为单位存储的打开/关闭时间值。

现在假设,当前时间是“Sun, 01:00”(一周的第一天),执行上面的转换这个值是60;一周的最后一天(星期六)的开/关时间设置为“17:00”和“02:00”(实际上是星期日),在数据库中存储为 9660 和 10200(星期六,26:00) .在这种情况下,上面的查询将找不到我们需要的记录(星期六、17:00、02:00),因为我们可能没有任何小于“02:00”(120)的 open_time。为了解决这个问题,我们将“Sun, 01:00”转换为“Sat, 25:00”,方法是将 7*1440(整周)添加到 $currenttime,结果将是 10140。然后 DB 查询如下:

SELECT open_time,clos_time FROM open_hours 
    WHERE (open_time <= $currenttime 
         AND close_time >= $currenttime)
         OR (open_time <= $currenttime +10080
         AND close_time >= $currenttime + 10080);

或者什么是替代和更简洁的解决方案?

最佳答案

存储分钟(int(4) 无符号)是要走的路。
但是,不是存储工作日 + opening_hour,关闭时间(带偏移量),
你应该存储从周一中午 12 点开始的分钟:-

 Monday  18:00 = (1 - 1)*60 * 18 = 1080
 Tuesday 02:00 = (2 - 1)*60 * 24 + (2 * 60) = 1560
 ...
 // please take note shop could have different operating hour for each day

因此,当前时间是星期二凌晨 1:30,即:-

 // mysql expression
 $expr = (weekday(current_timestamp)+1) * 1440 + (hour(current_timestamp)*60) + minute(current_timestamp)

SQL :-

 select ... 
 from opening_hours
 where
 open_time  >= $expr and
 close_time <= $expr;

关于php - 处理时间和午夜后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8278521/

相关文章:

php - 在同一个 mysql 主机上,如何将 WordPress 帖子从一个数据库传输到另一个数据库?

php - 无需离开页面/网站即可提交外部表单

Mysql::Error: 不正确的字符串值: '\xE9ditos...' with rails

java - 连接android到wamp服务器,出现空指针异常

sql - ON UPDATE CURRENT_TIMESTAMP 和 JPA

php - 在php中合并两个对象

php - Amazon Cloudfront 私有(private)分发 - CSS 内图像的链接

php - 获取 id 的标签

PHP POST 通过 AJAX 循环通过 javascript 发送对象文字

python - 在python中读取外部sql脚本