Aritmetica data/ora con una stringa in Ruby
Domanda
In Ruby, sto cercando di fare quanto segue.
def self.stats(since)
return Events.find(:all, :select => 'count(*) as this_count', :conditions => ['Date(event_date) >= ?', (Time.now - since)]).first.this_count
end
dove "since" è una stringa che rappresenta un periodo di tempo ("1 ora", "1 giorno", "3 giorni") e così via.Eventuali suggerimenti?
Soluzione
L'ho hackerato insieme alla gemma 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
[modifica] Per rispondere alla tua domanda, potresti provare in questo modo:
:conditions => ['Date)event_date) >= ?', (string_to_date(since).ago(Time.now))]
Altri suggerimenti
Prova a utilizzare Cronico per analizzare le stringhe di data in oggetti datetime effettivi.
Sono d'accordo con John Millikin. Cronico, o anche i tuoi stessi aiutanti, sarebbe una dipendenza molto più leggera ed efficace da trasportare rispetto all'intero ActiveSupport, presupponendo che tu non sia già intrappolato all'interno di Rails.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow