Ruby 中使用字符串的日期时间算术

Datetime arithmetic with a string in Ruby

提问人:aronchick 提问时间:9/3/2008 最后编辑:aronchick 更新时间:12/5/2013 访问量:1992

问:

在 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 天”)等。有什么建议吗?

Ruby 日期时间

评论


答:

2赞 John Millikin 9/3/2008 #1

尝试使用 Chronic 将日期字符串分析为实际的 datetime 对象。

2赞 Wieczo 9/3/2008 #2

我用 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))]
0赞 RubenCaro 12/5/2013 #3

我同意约翰·米利金(John Millikin)的观点。Chronic,甚至是你自己的助手,将是一个比整个 ActiveSupport 更轻、更有效的依赖,假设你还没有被困在 Rails 中。