0

ばかげた質問かもしれませんが、今は気が狂います。どうして

 User.where(:created_at => 1.day.ago..Time.now).count
   (0.8ms)  SELECT COUNT(*) FROM "users" WHERE ("users"."created_at" BETWEEN '2012-11-06 17:58:22.443552' AND '2012-11-07 17:58:22.443809')
 => 2 

 User.where(:created_at => 1.day.ago.to_date..Time.now.to_date).count
   (0.6ms)  SELECT COUNT(*) FROM "users" WHERE ("users"."created_at" BETWEEN '2012-11-06' AND '2012-11-07')
 => 0 

別の結果を教えてください。

時間がなければ(.to_dateを使用すると)、1日の始まりと終わりに真夜中になるはずです。これは私が望むものですが、いくつかのあいまいな理由で、0 と表示されますが、10 分前のように 2 人のユーザーを作成しました....

4

1 に答える 1

1

次の回答が役立つ場合があります。 MySQLの「between」句は包括的ではありませんか?

あなたの質問に具体的にするために、上記のリンクから回答をコピーして書き直します。

問題は、2011-01-31 が実際には 2012-11-07 00:00:00 であることです。それが一日の始まりです。日中のすべては含まれていません。

したがって、10 分前に追加したエントリは、時間を追加しなかった場合は明らかにスキップされます。

于 2012-11-07T18:14:26.987 に答える