2012-04-14 7 views
3

MySQLのdatetimeオブジェクトが現在2時間以内に存在し、特定のリンクを表示しているかどうかを確認しようとしていますが、現在の1時間のうち2時間以上ride_hour 。PHP/CakePHP日時比較

$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' が...)'。すなわち「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