
あきぞらです。
LaravelでEloquentを使っていて、timestampで比較をしたい場面がありました。
うまくやる方法がなかなか見つからず、自前で実装してみました。
今回はその方法の1つについて紹介していきます!
date()を使ってtimestamp型を比較
reserved_postsというテーブル(モデルはReservedPost)にある、
send_atカラムが現在時刻より後のデータを取得してみます。
// 日本時間に設定
date_default_timezone_set('Asia/Tokyo');
// send_atが現在時刻以降
$reserveData = ReservedPost::where('send_at', '>=', date('Y-m-d H:i:s'))
->get();
現在時刻をdate('Y-m-d H:i:s')として、timestampで比較しています。
時間の指定をする場合
たとえば、send_atが「30分以内のもの」、「1時間以上経過したもの」など、
時間の指定をしたいときがあります。
そんなときは、time()関数を比較してあげます。
// send_atが今から30分(30*60秒)経過
$reserveData = ReservedPost::where('send_at', '<=', date('Y-m-d H:i:s', time()-(30*60)))
->get();
これでtimestampでの比較ができるようになりました。