有人可以解釋這一點嗎?有效記錄,結果插圖
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:00:00的時間(至少在MySQL和Postgres),這是你從哪裏得到你的差異。
我使用的是Postgres,這是來自活動記錄的查詢詳細信息,第一個SELECT COUNT(*)FROM「posts」WHERE(「posts」。「p_date」BETWEEN'2016-09-08 15:33:24.390596'AND'2016-09-15 15:33:24.390711') and the s第二個 SELECT COUNT(*)FROM「posts」WHERE(「posts」。「p_date」BETWEEN'2016-09-07 21:00:00.000000'AND'2016-09-15 20:59:59.999999') –
it似乎有一天添加到第二個查詢 –
正確,所以postgres也將日期對象轉換爲時間戳爲00:00:00的日期時間,因爲你的兩個查詢涉及兩個不同的時間範圍,你會得到不同的答案。 由於該列是日期,因此如果您將日期用作範圍,則會得到一致且正確的答案。 –
什麼是您的時區設置? –
如果你做'Post.where(pdate:Date.today - 7.days).count'這是否等於差異? – SteveTurczyn
時區格林威治標準時間+3 –