2009-06-19 18 views
0

我们有一个网格控件,允许用户在不同字段中筛选文本。其中一些字段可能是时间戳,如created_at和updated_at。现在在Rails中按日期子字符串筛选

,用户可以做很多不同类型的过滤器,包括>,<,> =,< =等,所以,从控制遇到的查询可能类似于:

“created_at> 2009“或”created_at> = 2006并created_at < = 2010“。

数据库不会将年份识别为有效的时间戳,也不会自动将它们转换为有效的时间戳。有没有任何插件或惯用方法来完成一年或更好的时间戳的一部分,对含义进行最佳猜测,并将其转换为可用的数据库时间戳?

回答

3

看一看下面的项目

例如,searchlogic支持像下面的一个条件。

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

searchlogic看起来mintox - 我认为它会做的是这里所需要的东西,虽然我还没有实现它自己。 – mlambie 2009-06-20 09:23:04

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]) 

也许这样的事情?

1

你可以使用Ruby的时间类

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

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