【问题标题】:Check time from mysql database with PHP使用 PHP 从 mysql 数据库检查时间
【发布时间】:2020-04-04 12:36:22
【问题描述】:

我有两次在 mysql DB 开始 10:00 和结束 18:00 现在我想用 PHP 检查时间是否大于或小于这两次怎么办?谢谢 Mysql 只设置为 TIME 没有日期时间,基本上我想检查现在时间是否不在开始和结束之间。 start 代表 = from2,end 代表 to2。 Day_id 是工作日。这是行不通的

$time_now = date("H:i");
//in DB format 00:00 // time
echo "SELECT * FROM opening_hrs WHERE 
        (TIME(from2) > TIME('".$time_now."')  AND TIME(to2) < TIME('".$time_now."') )
        AND day_id=".$day_id;

关于如何检查时间的任何想法("H:i");到数据库之间?

【问题讨论】:

  • PHP不需要导入时间,MySQL有NOW()函数可以使用当前时间。
  • 旁注:不要通过直接连接参数来构建查询,它会让你打开SQL injection。你应该改用prepared statements
  • 这是否正确:“我想检查现在的时间是否不在开始和结束之间”?您的查询正好相反。
  • 如果美国的服务器 ID 和网站在澳大利亚,我如何使用 NOW()?
  • 非常感谢您对“El_Vanja”的评论,所以只想检查现在时间是否介于 DB 中的时间之间,例如:12:00 和 16:00 你有什么例子吗?

标签: php mysql sql datetime timezone


【解决方案1】:

试试这个查询,使用 MySql 的当前时间概念。

SELECT * FROM opening_hrs 
 WHERE TIME(NOW()) >= TIME(from2)
   AND TIME(NOW()) < TIME(to2)
   AND day_id=whatever

专业提示注意使用&gt;= 作为时间范围的开始,&lt; 作为结束,以避免off-by-one 错误。

NOW()是MySql中的时区敏感操作。如果您在打开每个 MySql 连接后立即执行此操作。您将从NOW() 获取您的当地时间。

SET time_zone = `Australia/Sydney`;

Obvs,使用你自己的time zone designator

【讨论】:

  • 我已经设置了 date_default_timezone_set('Australia/Sydney');
  • 我还需要别的吗?在 php 中设置 ot 在 php.ini 中?
  • 我给了你一个纯 MySql 的方式来做你的查询。为了让我的回答为您工作,不需要更改您的 php 配置。我更正了@El_Vanja 指出的查询中的一个错误,你的范围的开头和结尾互换了(我犯了无数次这个错误)。
【解决方案2】:

我只会使用current_time,这是一个 MySQL 内置的,可以为您提供当前时间:

select * 
from opening_hrs 
where 
    current_time >= time(:from2)   
    and current_time < time(:to2)
    and day_id = :day_id

请注意,您应该使用准备好的语句,而不是将变量连接到查询字符串中:this famous SO post 中的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 2018-08-30
    • 2011-04-20
    • 1970-01-01
    相关资源
    最近更新 更多