#概要
created_at
や updated_at
などに使われる timestamp
型は非常に便利で、不等号で簡単に比較ができるのですが、気を付けないとうまく動いてくれません。すごく基本的なことですが、場合によっては適当に書いても正常に動いてしまうことがあるので意外と気づきにくい部分だと思います。
#本題
デフォルトの unixtime
で扱っている場合
e.g.)1596447140
など
はそのまま使えて、
$query = \DB::select()
->from('table_name')
->where('created_at', '>', strtotime('-1 week'))
->execute();
のように書くだけで比較ができます。この場合は1週間前よりあとに作られたレコードだけ取得します。
一方、違うフォーマットで扱っている場合
e.g.)2020-08-03 18:32:20
など
は注意が必要で、フォーマットも合わせてあげる必要があります。例の場合は、
$query = \DB::select()
->from('table_name')
->where('created_at', '>', date('Y-m-d h:i:s', strtotime('-1 week')))
->execute();
と書くと同様の動きをしてくれます。
#まとめ
しっかり使えば非常に便利なtimestamp。一つのサービスで使うtimestampのフォーマットは合わせた方が良いですね。
余談ですが、'Y-m-d h:i:s'
と書くべきところを'Y-m-s h:i:s'
と書いていて、更新するたびに取得されるレコードが違うということになったりもしました。さすがに気づきましたけど(30分ほど苦戦して上司に聞いて)。