17

モデルのあるRailsアプリがありCheckinます。当日の特定の時間範囲内にあるすべてのレコードを検索したい。where午後12時から午後4時30分までに作成されたすべてのレコードを取得するには、どのように記述すればよいですか?

4

3 に答える 3

54

@ x1a4の答えはあなたにとって良いはずですが、範囲を使用して、より読みやすく短い方法でそれを行うことができます.

 Checkin.where(created_at: Time.parse("12pm")..Time.parse("4:30pm"))

次のようなものが生成されます。

SELECT "checkins".*
FROM "checkins" 
WHERE ("checkins"."created_at" BETWEEN '2012-05-28 12:00:00.000000' AND '2012-05-28 16:30:00.000000')

Time.parse("12pm")時間を作成する他の方法で変更できます。

于 2012-05-28T02:41:16.043 に答える
14

これは、UTC タイム ゾーンを想定して動作するように見えます。

Record.where('created_at > ? AND created_at < ?', Date.today + 12.hours, Date.today + 16.5.hours)

またはBETWEEN:

Record.where('created_at BETWEEN ? AND ?', Date.today + 12.hours, Date.today + 16.5.hours)

BETWEEN範囲内の 2 番目の値を含む場合と含まない場合があります。Postgres にはそれが含まれています。

于 2012-05-28T02:11:16.753 に答える
0

以下の gem を使用して、日付間のレコードを見つけることができます。

この宝石は非常に使いやすく、より明確です [星によって][1]。私はこの宝石を使用しています.APIはより明確で、ドキュメントもよく説明されています.

Post.between_times(
 Time.zone.now - 3.hours,  # all posts in last 3 hours
 Time.zone.now
)

ここでは、私たちのフィールドも通過できますPost.by_month("January", field: :updated_at)

ドキュメントを参照して、試してみてください。

于 2015-02-05T12:58:20.747 に答える