Datetime aritmética com uma seqüência de caracteres em Ruby
Pergunta
Em Ruby, eu estou tentando fazer o seguinte.
def self.stats(since)
return Events.find(:all, :select => 'count(*) as this_count', :conditions => ['Date(event_date) >= ?', (Time.now - since)]).first.this_count
end
onde "desde" é uma seqüência de caracteres que representa uma quantidade de tempo (1 hora', '1 day', '3 dias') e assim por diante.Alguma sugestão?
Solução
Eu hackeado isso, juntamente com o 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
[editar] respondendo A sua pergunta, você pode tentar assim:
:conditions => ['Date)event_date) >= ?', (string_to_date(since).ago(Time.now))]
Outras dicas
Tente usar Crônica para analisar a data de cadeias de caracteres em real datetime objetos.
Eu concordo com o João Millikin. Crônica, ou até mesmo o seu próprio ajudantes, seria muito mais leve e eficaz de dependência para realizar todo o ActiveSupport, supondo que você já não estão presos dentro de Trilhos.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow