3

MySQL に保存された datetime オブジェクトが現在から 2 時間以内にあるかどうかを確認しようとしています。特定のリンクを表示するか、現在の時間の将来の ride_hour が 2 時間以上あるかどうかに基づいていません。これが私が試したことです:

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

そのため、最初にその日を比較して、今日が起こっているかどうかを確認しています。そうであれば、時間を確認する必要はありません。そうでなければ、$ride_hour と $now_hour を比較しようとしています。その日は明らかに機能していますが、時間の比較は機能していないようです。

私がやろうとしているもう 1 つのことは、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);

ありがとうございました!

4

1 に答える 1

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

于 2012-04-14T15:30:55.447 に答える