我有一个带有Checkin
模型的 Rails 应用程序。我想查找当天特定时间范围内的所有记录。我将如何编写一个where
来获取在中午 12 点到下午 4:30 之间创建的所有记录?
问问题
29569 次
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
可能包含或不包含范围中的第二个值。Postgres 包含它。
于 2012-05-28T02:11:16.753 回答
0
您可以使用下面的 gem 来查找日期之间的记录,
这个宝石很容易使用而且更清晰[按星][1]。我正在使用这个 gem,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 回答