Arithmétique date-heure avec une chaîne en Ruby
Question
En Ruby, j'essaie de faire ce qui suit.
def self.stats(since)
return Events.find(:all, :select => 'count(*) as this_count', :conditions => ['Date(event_date) >= ?', (Time.now - since)]).first.this_count
end
où « depuis » est une chaîne représentant une durée (« 1 heure », « 1 jour », « 3 jours ») et ainsi de suite.Aucune suggestion?
La solution
J'ai piraté ceci avec la gemme 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
[modifier] Pour répondre à votre question, vous pouvez essayer comme ça :
:conditions => ['Date)event_date) >= ?', (string_to_date(since).ago(Time.now))]
Autres conseils
Essayez d'utiliser Chronique pour analyser les chaînes de date en objets datetime réels.
je suis d'accord avec John Millikin. Chronique, ou même vos propres assistants, constitueraient une dépendance beaucoup plus légère et efficace à transporter que l'ensemble d'ActiveSupport, en supposant que vous n'êtes pas déjà piégé dans Rails.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow