Aritmética de fecha y hora con una cadena en Ruby
Pregunta
En Ruby, intento hacer lo siguiente.
def self.stats(since)
return Events.find(:all, :select => 'count(*) as this_count', :conditions => ['Date(event_date) >= ?', (Time.now - since)]).first.this_count
end
donde "desde" es una cadena que representa una cantidad de tiempo ("1 hora", "1 día", "3 días"), etc.¿Alguna sugerencia?
Solución
Hackeé esto junto con la gema 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
[editar] Para responder a tu pregunta, puedes intentarlo así:
:conditions => ['Date)event_date) >= ?', (string_to_date(since).ago(Time.now))]
Otros consejos
Intenta usar Crónico para analizar las cadenas de fecha en objetos de fecha y hora reales.
estoy de acuerdo con John Millikin. Crónico, o incluso sus propios ayudantes, sería una dependencia mucho más liviana y efectiva que ActiveSupport completo, suponiendo que no esté atrapado dentro de Rails.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow