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?

War es hilfreich?

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
scroll top