Datetime-Arithmetik mit einem String in Ruby
Frage
In Ruby versuche ich Folgendes zu tun.
def self.stats(since)
return Events.find(:all, :select => 'count(*) as this_count', :conditions => ['Date(event_date) >= ?', (Time.now - since)]).first.this_count
end
Dabei ist „since“ eine Zeichenfolge, die eine Zeitspanne („1 Stunde“, „1 Tag“, „3 Tage“) usw. darstellt.Irgendwelche Vorschläge?
Lösung
Ich habe das zusammen mit dem ActiveSupport-Gem gehackt:
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
[Bearbeiten] Um Ihre Frage zu beantworten, könnten Sie es so versuchen:
:conditions => ['Date)event_date) >= ?', (string_to_date(since).ago(Time.now))]
Andere Tipps
Versuchen Sie es mit Chronisch um die Datumszeichenfolgen in tatsächliche Datetime-Objekte zu analysieren.
Ich bin einverstanden mit John Millikin. Chronisch, oder sogar Ihre eigenen Helfer wären eine viel leichtere und effektivere Abhängigkeit als das gesamte ActiveSupport, vorausgesetzt, Sie sind nicht bereits in Rails gefangen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow