2011-03-09 62 views
1

我有一个从SQL查询(日期时间类型字段)返回的日期,并希望将它与今天的日期在PHP中进行比较。我已经咨询了php手册,并且有很多方法可以做到这一点。我终于想出了一个比较字符串的解决方案,但我想知道是否有任何'更好'(最佳实践),更干净或更快的方法来做到这一点。这是我的解决方案:检查从SQL日期时间是今天

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

感谢

+1

只要使用日期( 'Y-M-d'),而不是今天$ =新日期时间( “现在”); $ f_today = $ TODAY->格式( 'Y-M-d'); – Sparky 2011-03-09 12:28:20

回答

17

认真的家伙?

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

这家伙应该得到他给予好评很多更多的人。这是要走的路。 – 2015-03-17 09:26:14

+1

是,最好的一个,我认为 - 但一个支架的左大括号前 – gsziszi 2015-05-09 22:25:00

+0

感谢gsziszi丢失:P – 2015-05-27 01:23:40

2

你不得不三种解决方法:

  • 处理字符串,就像你正在做的;这似乎是一个解决方案,它的工作原理是;即使它不感觉干净
  • 时间戳工作,使用strtotime()time();这是一个坏主意:UNIX Timestamps仅日期是于2038
  • DateTime到处工作大于1970年和更低的工作;这两者都会工作并且感觉干净


如果我需要在PHP端的任何计算,我可能会去的第三个解决方案 - 但第一个是在大多数情况下好了,我想。


一点题外话:不是在格式化你的日期Y-m-d,你可以检查它是否是:

  • 的比今天
  • 比明天少等于大。
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'; 
} 
5

你可以考虑此因素成从数据库查询返回的数据:

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

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

+0

到目前为止,干净的解决方案的所有其他解决方案。 – 2011-03-09 14:29:10

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 
} 
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. 如果它不能满足您的需要,请提出您的问题举一些例子。

1

您可以使用新的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'; 
      } 
1

对不起,我来提问,挖掘机,但我试图达到同样的事情,我发现了一个简单的解决方案 - 如果你想只选择今天的日期行,你可以这样做:

WHERE DATE(datetime_column)=CURDATE() 

在你的MySQL查询语法。

相关问题