【问题标题】:check if datetime from sql is today检查来自 sql 的日期时间是否是今天
【发布时间】:2025-12-21 14:45:16
【问题描述】:

我有一个从 sql 查询(日期时间类型字段)返回的日期,并希望将其与 PHP 中的今天日期进行比较。我查阅了php手册,有很多方法可以做到这一点。我终于想出了一个比较字符串的解决方案,但我想知道是否有任何“更好”(最佳实践)、更清洁或更快的方法来做到这一点。这是我的解决方案:

// $sql_returned_date='2008-10-17 11:20:04'

 $today = new DateTime("now");
 $f_today=$today->format('Y-m-d'); //formated today = '2011-03-09'
 $sql_date=substr($sql_returned_date,0,9); //I get substring '2008-10-17'
 if($f_today==$sql_date)
 {
    echo "yes,it's today";
 }else{
    echo "no, it's not";
 }

谢谢

【问题讨论】:

  • 只需使用 date('Y-m-d') 代替 $today = new DateTime("now"); $f_today=$today->format('Y-m-d');

标签: php mysql datetime date


【解决方案1】:

真的吗?

//$mysql_date_string= '2013-09-20' OR '2013-09-20 12:30:23', for example

$my_date = new DateTime($mysql_date_string);

if($my_date->format('Y-m-d') == date('Y-m-d')) {
    //it's today, let's make ginger snaps
}

【讨论】:

  • 这个家伙应该得到更多人的支持。这是要走的路。
  • 是的,我认为最好的一个 - 但是在开始的大括号之前缺少一个括号
【解决方案2】:

您可以将此因素考虑到从数据库查询返回的数据中:

SELECT `DateOnDB`,
       DATE(`DateOnDB`) = DATE(CURDATE()) AS isToday
  FROM `dbTable`

并简单地使用 PHP 来测试 isToday 列的值

【讨论】:

  • 迄今为止所有其他解决方案中最干净的解决方案。
【解决方案3】:

对不起,我是一个问题挖掘者,但我试图实现同样的目标,我找到了一个简单的解决方案 - 如果您只想选择具有今天日期的行,您可以这样做:

WHERE DATE(datetime_column)=CURDATE()

在您的 mySQL 查询语法中。

【讨论】:

    【解决方案4】:

    你会有三个解决方案:

    • 使用字符串,就像你正在做的那样;这似乎是一个行之有效的解决方案;即使它感觉不干净
    • 使用时间戳,使用 strtotime()time() ;这是个坏主意:UNIX Timestamps 仅适用于大于 1970 且小于 2038 的日期
    • 在任何地方都与DateTime 合作;这既有效又感觉干净


    如果我需要在 PHP 端进行任何计算,我可能会采用第三种解决方案——但我想第一种在大多数情况下都可以。


    作为旁注:您可以检查它是否是:

    ,而不是将您的日期格式化为Y-m-d
    • 大于等于今天
    • 不到明天。

    【讨论】:

      【解决方案5】:
      1. 如果SQL返回的日期是2011-03-09这种格式(没有计时的日期格式),

        $sqlret = "2011-03-05";
        
        $curdate = date('Y-m-d');
        
        echo $diff = strtotime($curdate) - strtotime($sqlret);
        
        echo $no_diff = $diff/(60*60*24);
        
      2. 如果日期与时间类似:

        $sqlret = "2011-03-05 12:05:05",
        

        只要让你当前的日期格式也这样:

        $curdate = date('Y-m-d H:i:s');
        
      3. 如果它不能满足您的需求,请通过一些示例提出您的问题。

      【讨论】:

        【解决方案6】:

        你可以这样使用新的 DateTime php 对象。

              $date1 = new DateTime('2012-01-21');     
              $date2  = new DateTime ( 'now');
              $interval = $date1->diff($date2);
                if( $interval->format('%R%a ') == 0){
                    echo 'it s today';
                    }
        

        【讨论】:

          【解决方案7】:

          我会这样做:

          # SQL
          SELECT DATE_FORMAT(date_col, "%Y-%m-%d") AS created_at FROM table
          
          # PHP
          if ( date('Y-m-d') == $sql_date ) { // assuming $sql_date is SQL's created_at
              echo 'today';
          }
          

          【讨论】:

            【解决方案8】:
            $time = //your timestamp
            $start = mktime(0,0,0,date("j"),date("n"),date("Y"));
            $end = mktime(23,59,0,date("j"),date("n"),date("Y"));
            
            if($time  > $start && $time < $end){
             //is today
            }
            

            【讨论】: