我有一个从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";
}
感谢
答案 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)
如果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);
如果日期与时间相同:
$sqlret = "2011-03-05 12:05:05",
只需将您当前的日期格式设为:
$curdate = date('Y-m-d H:i:s');
如果不能满足您的需求,请举例说明您的问题。
答案 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
}