Datetime арифметика со строкой в ​​Ruby - PullRequest
0 голосов
/ 03 сентября 2008

В 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

где «с» - строка, представляющая количество времени («1 час», «1 день», «3 дня») и т. Д. Есть предложения?

Ответы [ 3 ]

2 голосов
/ 03 сентября 2008

Я взломал это вместе с гемом ActiveSupport:

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))]
2 голосов
/ 03 сентября 2008

Попробуйте использовать Хронический для анализа строк даты в фактических объектах datetime.

0 голосов
/ 05 декабря 2013

Я согласен с Джоном Милликиным . Chronic или даже ваши собственные помощники будут гораздо более легкой и эффективной зависимостью для переноса, чем вся ActiveSupport, при условии, что вы еще не оказались в ловушке внутри Rails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...