Rails 3 DateTime Comparison w/ Date In An ActiveRecord Query

*爱你&永不变心* 提交于 2019-12-09 05:34:46

问题


I'm trying to search a model for any dates equal to a specific date while omitting the timestamp. In Rails I could simply execute this as DateTime.to_date == somedate, however I don't think it's quite as easy to formulate in SQL where I wouldn't be able to apply the to_date method to an entire column like created_at:

Foo.where("created_at == some_day_without_time_stamp").count

Initially I thought that because I was using a postgresql database I could simply use psql syntax, but I much much rather leave it to ActiveRecord to decide what sql is most applicable and keep my code agnostic of database vendors. Is this possible without any additional plugins or gems?


回答1:


Try created_at >= some_day_with_00:00:00 timestamp and create_at < some_day_plus_one_with_00:00:00 timestamp




回答2:


I would do something like...

someday = Date.today
Foo.where( :created_at => (someday)..(someday + 1.day) )

This would capture all created_at dates between midnight on someday and someday + 1. This is inclusive (so it would include a Foo created bang on midnight on the +1 day) but may be 'just good enough' for your needs without messing with timestamps.

For niceness, I would wrap it up as a scope

scope :on_day, ( lambda do |someday|
  where( :created_at => (someday)..(someday + 1.day) )
end )

So

Foo.on_day( Date.yesterday ).count

is nicely readable.




回答3:


DateTime class have two usefull methods to do this: beginning_of_day and end_of_day.

For this case, in which you have a Date object, you might do:

Foo.where('created_at >= #{Date.today.to_time.beginning_of_day} AND 
           created_at <= #{Date.today.to_time.end_of_day}')

Notice that you have to transform the Date object to a DateTime object




回答4:


With scope:

scope :on_day, (lambda do |day|
   where(date: day.beginning_of_day..day.end_of_day)
end)

Using:

Foo.on_day(Date.today).count


来源:https://stackoverflow.com/questions/13689441/rails-3-datetime-comparison-w-date-in-an-activerecord-query

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!