2012-04-14 3 views
3

MySQL에 저장된 datetime 객체가 현재 2 시간 이내인지 확인하고 특정 링크를 보여 주거나 현재 시간의 향후 2 시간 이상 ride_hour를 기반으로하지 않는지를 확인하려고합니다. . 여기에 내가 무엇을 시도했다입니다 : 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 컨트롤러에서 정렬 값을 기반으로 결과를 제한합니다. 결과를 모두, ALL, 결과가 미래의 날짜 또는 과거의 결과로 제한하려고 시도하고 페이지 매김합니다. 시도하는 방법은 다음과 같습니다.

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'는 1-12이고 'H'는 0-23입니다. – searlea

답변

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