2012-04-14 99 views
3

我想检查MySQL存储的datetime对象是否在2小时之内,并且只显示某些链接,或者基于如果ride_hour在当前小时的将来超过2小时。以下是我已经试过:PHP/CakePHP datetime compare

$now = date('Y-m-d'); 
$now_hour = date('h'); 
$ride_date = date('Y-m-d',strtotime($ride['Ride']['date'])); 
$full_ride_hour = date('h',strtotime($ride['Ride']['date'])); 
$ride_hour = $full_ride_hour-2; 

所以我比较第一天,看它是否是即使在今天happing,如果是这样我不需要检查小时。否则,我试图比较$ ride_hour和$ now_hour。这一天显然工作,但小时比较似乎没有工作。

我想要做的另一件事是在cakePHP控制器中,是基于排序值限制结果。我试图将结果限制为“全部”,“未来日期的结果”或“过去的结果”以及分页。以下是我如何尝试哪些方法无效:

switch ($sort) { 
case 0: 
$rides = $this->paginate('Ride',array('Ride.user_id' => $user_id,'Ride.date > now()')); 
break; 

case 1: 
$rides = $this->paginate('Ride',array('Ride.user_id' => $user_id)); 
break; 

case 2: 
$rides = $this->paginate('Ride',array('Ride.user_id' => $user_id,'Ride.date < now()')); 
break; 
} 

$this->set('sort',$sort); 
$this->set('rides', $rides); 

谢谢!

+0

有一个日期间'和日期的差异( 'H',...)''( 'H',...)'。即“h”是1-12,而“H”是0-23。 – searlea 2012-04-14 15:43:12

回答

4

这对于PHP中的DateTime功能来说会容易得多。我不确定“2小时内”是什么意思。我假设你的意思是在2小时之前和2小时之后。如果不是,你可以很容易地改变间隔。

$mysql_date_obj = new DateTime($date_from_mysql); 
$before_time = new DateTime('now'); 
$before_time->add(DateInterval::createFromDateString('-2 hour')); 
$after_time = new DateTime('now'); 
$after_time->add(DateInterval::createFromDateString('2 hour')); 

if($before_time <= $mysql_date_obj && $mysql_date_obj <= $after_time) { 
    // date is within 2 hours. 
} 

文档:http://php.net/DateTime

+0

谢谢!工作得很好,我试图使用该对象,并得到了500错误,但它现在工作,非常感谢。 – Michael 2012-04-14 15:46:22