17

我有一个带有Checkin模型的 Rails 应用程序。我想查找当天特定时间范围内的所有记录。我将如何编写一个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可能包含或不包含范围中的第二个值。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 回答