检查sql中的datetime是否为今天

时间:2011-03-09 12:19:29

标签: php mysql datetime date

我有一个从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";
 }

感谢

8 个答案:

答案 0 :(得分:18)

说真的好吗?

//$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
}

答案 1 :(得分:5)

您可以将其纳入数据库查询返回的数据中:

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

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

答案 2 :(得分:2)

你有三个解决方案:

  • 像你一样使用字符串;这似乎是一个解决方案工作;即使它没有感觉干净
  • 使用strtotime()time()处理时间戳;这是个坏主意:UNIX Timestamps仅适用于大于1970且低于2038的日期
  • 到处与DateTime合作;这将既有效又感觉干净


如果我需要在PHP端进行任何计算,我可能会选择第三种解决方案 - 但是在大多数情况下,第一种解决方案是正常的,我猜想。


作为旁注:不是将日期格式化为Y-m-d,而是可以检查它是否为:

  • 大于今天
  • 不到明天。

答案 3 :(得分:2)

  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. 如果不能满足您的需求,请举例说明您的问题。

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

请原谅我是一个挖掘问题的人,但是我试图达到同样的目的,而且我找到了一个简单的解决方案 - 如果你只想选择今天可以做的行:

WHERE DATE(datetime_column)=CURDATE()

在mySQL查询语法中。

答案 6 :(得分:0)

我会这样做:

# 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';
}

答案 7 :(得分:0)

$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
}