0
1

More than 3 years have passed since last update.

FuelPHPにおいてtimestampで範囲を指定して取得するとき注意点

Posted at

概要

created_atupdated_at などに使われる timestamp 型は非常に便利で、不等号で簡単に比較ができるのですが、気を付けないとうまく動いてくれません。すごく基本的なことですが、場合によっては適当に書いても正常に動いてしまうことがあるので意外と気づきにくい部分だと思います。

本題

デフォルトの unixtime で扱っている場合
e.g.)1596447140 など
はそのまま使えて、

unixtime.php
$query = \DB::select()
->from('table_name')
->where('created_at', '>', strtotime('-1 week'))
->execute();

のように書くだけで比較ができます。この場合は1週間前よりあとに作られたレコードだけ取得します。

一方、違うフォーマットで扱っている場合
e.g.)2020-08-03 18:32:20 など
は注意が必要で、フォーマットも合わせてあげる必要があります。例の場合は、

anyformat.php
$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分ほど苦戦して上司に聞いて)。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1