2012-04-14 16 views
3

Ich versuche zu überprüfen, ob ein MySQL-Datetime-Objekt innerhalb von 2 Stunden von jetzt rechts ist und nur bestimmte Links zeigen oder nicht, basierend auf der Ride_Stunde mehr als 2 Stunden in der Zukunft der aktuellen Stunde . Hier ist, was ich versucht habe:PHP/CakePHP datetime vergleichen

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

Also den Tag ich vergleiche zuerst zu sehen, ob es auch heute happing ist, wenn also nicht brauche ich die Stunde zu überprüfen. Ansonsten versuche ich $ ride_hour mit $ now_hour zu vergleichen. Der Tag funktioniert natürlich, aber der Stundenvergleich scheint nicht zu funktionieren.

Die andere Sache, die ich versuche zu tun, ist in der CakePHP-Controller, ist die Ergebnisse basierend auf einem Sortierwert zu begrenzen. Ich versuche, die Ergebnisse entweder auf ALLE, auf Ergebnisse mit einem Datum in der Zukunft oder auf Ergebnisse in der Vergangenheit und auf Paginate zu beschränken. Hier ist, wie ich versuche, was nicht funktioniert:

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); 

Vielen Dank!

+0

Es gibt einen Unterschied zwischen 'date ('h', ...)' und 'date ('H', ...)'. h "ist 1-12, während" H "0-23 ist. – searlea

Antwort

4

Dies wäre viel einfacher mit der DateTime-Funktionalität in PHP. Ich bin mir nicht sicher, was Sie mit "innerhalb von 2 Stunden" meinen. Ich nehme an, du meinst zwischen 2 Stunden vor und 2 Stunden danach. Wenn nicht, können Sie die Intervalle ziemlich einfach ändern.

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

Dokumentation: http://php.net/DateTime

+0

Vielen Dank! hat super funktioniert, ich habe versucht, dieses Objekt zu benutzen und bekam einen Fehler von 500, aber es funktionierte jetzt, vielen Dank. – Michael

Verwandte Themen