2

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

谢谢,

布赖恩

4

3 回答 3

5

像这样的东西应该可以工作(假设 MySQL):

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

您可以使用以下方法将Time实例转换为这种格式:

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

If the start time is larger than the end time you could reverse the logic, so instead of:

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

You could use:

Model.where("TIME(created_at) NOT BETWEEN '02:00:00' AND '22:59:59'")
于 2013-10-24T21:02:25.350 回答
0

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

Postgres 日期函数

Mysql 日期函数

因此,例如,在 Postgres 中,您可以尝试

extract(hour from timestamp 'a') BETWEEN (extract(hour from timestamp  'b') AND extract(hour from timestamp 'c'))
于 2013-10-24T21:00:28.943 回答
0

您可能正在寻找类似的东西

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

或者,您可以使用占位符条件使查询更简洁。

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

于 2013-10-24T20:38:19.687 回答