誰かがこれを説明できますか?アクティブレコード、結果のイラスト
Post.where(:p_date => ((Time.now - 7.days)..(Time.now))).count
-> 4507
Post.where(:p_date => ((Time.now - 7.days).beginning_of_day..(Time.now).end_of_day)).count
-> 4794
p_dateは時間なしのみ日付タイプですが。
はあなたに
誰かがこれを説明できますか?アクティブレコード、結果のイラスト
Post.where(:p_date => ((Time.now - 7.days)..(Time.now))).count
-> 4507
Post.where(:p_date => ((Time.now - 7.days).beginning_of_day..(Time.now).end_of_day)).count
-> 4794
p_dateは時間なしのみ日付タイプですが。
はあなたに
ありがとうp_date
は、日付列である場合は、あなたのクエリに
Post.where(p_date: (7.day.ago.to_date .. Date.today)).count
を日付を渡す
SELECT COUNT(*) FROM `posts` WHERE (`posts`.`p_date` BETWEEN '2016-09-08' AND '2016-09-15')
このクエリを使用しているあなたは、時間のオブジェクトに渡すと、データベースにはなります自動的に0時0分(少なくともmysqlとpostgresで)と比較して、そこから矛盾を取得します。
私はPostgresを使用しています。 「投稿」「投稿日」2016-09-08 15:33:24.390596「AND」2016-09-15 15:33:24.390711) と「s」からのCOUNT(* econd one WHERE( "posts"。 "p_date" 2016-09-07 21:00:00.000000 'AND' 2016-09-15 20:59:59.999999 ')からのSELECT COUNT(*) –
it 2番目のクエリ –
に1日追加されているようです。そうすれば、postgresは日付オブジェクトをタイムスタンプ00:00:00でキャストし、2つの異なるクエリに2つの異なる時間範囲が含まれるため、異なる回答が得られます。 この列は日付なので、範囲として日付を使用すると、一貫性のある正しい答えが得られます。 –
タイムゾーンの設定について教えてください。 –
'Post.where(pdate:Date.today - 7.days).count'を実行すると、それはその差に等しいか? – SteveTurczyn
タイムゾーンはGMT + 3です –