Ich habe ein Ereignis mit start_time
und end_time
und möchte überprüfen, ob das Ereignis "in Bearbeitung" ist. Das wäre zu prüfen, ob das heutige Datum im Bereich zwischen den beiden Daten liegt.
Wie würden Sie dies in einer Funktion tun?
===
Tatsächlich gibt es einen Operator, der dies erledigt. Erstellen Sie ein Range
und vergleichen Sie Time
Objekte mit dem ===
Operator.
start = Time.now.to_i
range = start..(start + 2)
inside = start + 1
outside = start + 3 # ok, now...
range === inside # true
range === outside # false
irb
Beispiel hat ebenfalls gut funktioniert, aber das interaktive Beispiel wurde in einigen Experimenten nicht immer korrekt wiedergegeben. Dieser ist einfacher auszuschneiden und einzufügen.
Es ist jetzt alles gerade.
.to_i
und dann überprüfen===
, ob sie im Bereich liegen. IMO.coverage?
ist eine bessere Lösung für Daten.In Ruby 1.9.2
===
funktioniert nicht, ich bekomme eine Fehlermeldung:Verwenden Sie stattdessen
#cover?
:quelle
cover?
Methode nicht bewusstDate
als auch(Date.yesterday..Date.tomorrow).cover?(Date.today) => true
===
funktioniert gut in Ruby 1.9.2. Sie haben gerade vergessen.to_i
Wenn Sie Rails verwenden, können Sie verwenden
TimeWithZone#between?
. Sie hätten dann so etwas:quelle
Da die Datumsklasse das Modul Vergleichbar enthält, verfügt jedes Datumsobjekt über eine
between?
Methode.quelle
Wenn Sie Rails verwenden, können Sie Folgendes versuchen:
Hinweis: Ich habe gerade verwendet
beginning_of_day
undend_of_day
um eine einfache Reichweite bereitzustellen. Der wichtige Teil ist dieinclude_with_range?
Methode für einen Bereich.quelle
include_with_range
da es kein Fall war, in dem ein Bereich mit einem Bereich verglichen wurde. Wahrscheinlich eine Art Gehirntumor. Guter Fang, danke @TylerRick. @ Heathd Antwort ist wirklich die beste.Wenn es sich um Zeitstempel handelt:
quelle
TypeError: can't iterate from Time
Überprüft ist das aktuelle Datum zwischen zwei Daten. Verwenden von Ruby
quelle
Zusammenfassung
quelle