Rails查询两个小时之间的时间戳

时间:2013-10-24 20:35:20

标签: ruby-on-rails ruby activerecord

我在Ruby on Rails中遇到问题,我需要允许用户设置两个时间列,然后查询该模型中具有两个时间戳小时内当前时间的所有实例。天无所谓,只是在指定的时间内是开始和结束时间戳。

谢谢,

布赖恩

3 个答案:

答案 0 :(得分:5)

这样的事情应该有效(假设MySQL):

Model.where("TIME(created_at) BETWEEN '07:00:00' AND '09:00:00'")

您可以使用以下内容将Time实例转换为此格式:

Time.now.strftime("%T") #=> "23:02:25"

如果开始时间大于结束时间,则可以反转逻辑,因此不是:

Model.where("TIME(created_at) BETWEEN '23:00:00' AND '01:59:59'")

您可以使用:

Model.where("TIME(created_at) NOT BETWEEN '02:00:00' AND '22:59:59'")

答案 1 :(得分:0)

您可能正在寻找类似

的内容

Model.where("starts_at >= ? AND ends_at =< ?", Time.current, Time.current)

或者,您可以使用placeholder conditions使查询更简洁。

Client.where("created_at >= :start_date AND created_at <= :end_date", {start_date: params[:start_date], end_date: params[:end_date]})

答案 2 :(得分:0)

如何解决此问题将取决于您使用的数据库b / c,据我所知,此类操作没有任何ActiveRecord帮助程序。但是有日期函数可以帮助你解决这个问题

Postgres Date functions

Mysql Date functions

例如,在Postgres中你可以尝试

extract(hour from timestamp 'a') BETWEEN (extract(hour from timestamp  'b') AND extract(hour from timestamp 'c'))