Was Sie von Ruby mit Time.parse verlangen, ist die Bestimmung einer Tageszeit. Das ist nicht das, was Sie wollen. Alle Bibliotheken, die mir einfallen, sind in diesem Punkt ähnlich: Sie sind an absoluten Zeiten interessiert, nicht an Zeitabschnitten.
Um Ihre Zeichenketten in Zeitformate zu konvertieren, mit denen wir arbeiten können, empfehle ich die Verwendung von Chronic ( gem install chronic
). Um in Sekunden umzurechnen, können wir alles relativ zur aktuellen Zeit machen und dann diese Zeit subtrahieren, um die absolute Anzahl der Sekunden zu erhalten, wie gewünscht.
def seconds_in(time)
now = Time.now
Chronic.parse("#{time} from now", :now => now) - now
end
seconds_in '48 hours' # => 172,800.0
seconds_in '15 minutes' # => 900.0
seconds_in 'a lifetime' # NoMethodError, not 42 ;)
Ein paar kurze Anmerkungen:
- En
from now
ist der Grund, warum Chronic benötigt wird - es verarbeitet natürlichsprachliche Eingaben.
- Wir geben an
now
um vor dem Fall sicher zu sein, dass sich Time.now zwischen dem Zeitpunkt, an dem Chronic seine Magie einsetzt, und dem Zeitpunkt, an dem wir es vom Ergebnis subtrahieren, ändert. Das wird vielleicht nie passieren, aber sicher ist sicher, denke ich.