DBから期間で絞り込んでwhereで取り出す方法。
よく紹介されているのが以下のような書き方。
from = Date.today.beginning_of_month
to = Date.today.end_of_month
sample = Sample.where(created_at: from...to )
Sampleテーブルから、created_atの日付が今月のものを抜き出しているつもりです。
たとえば、12月であれば01日から31日まであるので、12月1日から12月31日までのデータを抜き出してくれそうな気がしますよね。
しかし、実際にこれにより発行されるSQL文は、
SELECT * FROM 'samples' WHERE 'samples'.'created_at' >= '2013-12-01' AND 'samples'.'created_at' < '2013-12-31'
となるのです。
つまり、このままでは12月31日のデータというのは含まないのです。
これはTimeでも同じ現象が起こります。
Railsのwhereで、DateやDatetimeを範囲指定した場合、from以上、to未満という絞り込み方をされるようです。
なので、上記の例であれば、
to = Date.today.next_month.beginning_of_month
としてやれば、次月の初日未満(初日は含まない)となるので、意図通りの絞り込みになります。