在Rails中按日期子字符串过滤

时间:2009-06-19 17:36:08

标签: ruby-on-rails ruby database datetime

我们有一个网格控件,允许用户过滤不同字段中的文本。许多这些字段可能是时间戳,例如created_at和updated_at。

现在,用户可以执行许多不同类型的过滤器,包括>,<,> =,< =等等。因此,来自控件的查询可能如下所示:

“created_at> 2009”,或“created_at> = 2006和created_at< = 2010”。

数据库不会将年份识别为有效时间戳,rails也不会自动将其转换为有效时间戳。是否有任何插件或惯用方法可以完成一年或更好的部分时间戳,最好地猜测其含义,并将其转换为可用的数据库时间戳?

3 个答案:

答案 0 :(得分:3)

查看以下项目

例如,searchlogic支持以下条件。

Post.all(:conditions => { :hour_of_created_at => 9 })

答案 1 :(得分:2)

created_at> 2009年

Post.all(:conditions => ["created_at > ?", Date.new(y = 2010, m = 1, d = 1).to_s])

created_at> = 2006

Post.all(:conditions => ["created_at >= ?", Date.new(y = 2006, m = 1, d = 1).to_s])

created_at< = 2010

Post.all(:conditions => ["created_at <= ?", Date.new(y = 2010, m = 12, d = 31).to_s])

或许这样的事情?

答案 2 :(得分:1)

你可以使用ruby的时间等级

Time.local(2010) # => Fri Jan 01 -0600 2010

Time.gm(2010) # => Fri Jan 01 00:00:00 UTC 2010