在 Ruby 中,我正在尝试执行以下操作。
def self.stats(since)
return Events.find(:all, :select => 'count(*) as this_count', :conditions => ['Date(event_date) >= ?', (Time.now - since)]).first.this_count
end
其中“since”是表示时间量的字符串(“1 小时”、“1 天”、“3 天”)等等。有什么建议么?
尝试使用Chronic将日期字符串解析为实际的日期时间对象。
我和 ActiveSupport gem 一起破解了这个:
require 'active_support'
def string_to_date(date_string)
parts = date_string.split
return parts[0].to_i.send(parts[1])
end
sinces = ['1 hour', '1 day', '3 days']
sinces.each do |since|
puts "#{since} ago: #{string_to_date(since).ago(Time.now)}"
end
[编辑]要回答您的问题,您可以这样尝试:
:conditions => ['Date)event_date) >= ?', (string_to_date(since).ago(Time.now))]
我同意约翰·米利金的观点。假设你还没有被困在 Rails 中, Chronic,甚至你自己的助手,将是一个比整个 ActiveSupport 更轻、更有效的依赖项。