3 Stimmen

Ruby (mit Rails) konvertieren eine Zeichenfolge der Zeit in Sekunden?

Ich habe also eine Reihe von Zeitvorgaben... etwa in der Größenordnung von

'4 hours'
'48 hours'
'3 days'
'15 minutes'

Ich möchte sie alle in Sekunden umrechnen. Für '4 hours' funktioniert dies problemlos.

Time.parse('4 hours').to_i - Time.parse('0 hours').to_i
=> 14400 # 4 hours in seconds, yay

Dies funktioniert jedoch 48 Stunden lang nicht (Fehler außerhalb des Bereichs). Es funktioniert auch nicht für 3 Tage (kein Informationsfehler), usw.

Gibt es eine einfache Möglichkeit, diese Zeichenfolgen in Sekunden umzuwandeln?


-1voto

Max Williams Punkte 31620
>> strings = ['4 hours', '48 hours', '3 days', '15 minutes', '2 months', '5 years', '2 decades']
=> ["4 hours", "48 hours", "3 days", "15 minutes", "2 months", "5 years", "2 decades"]
>> ints = strings.collect{|s| eval "#{s.gsub(/\s+/,".")}.to_i" rescue "Error"}
=> [14400, 172800, 259200, 900, 5184000, 157788000, "Error"]

0 Stimmen

Diese Methode ist trickreich, aber sehr gefährlich eval mit Benutzereingaben. Wenn Sie eine Regexp verwendet haben, um zu überprüfen, dass die Eingabe nur das war, was Sie erwartet haben (z. B. /\d+\s+(?:minutes|hours|days|...)/ ), dann wäre das gar nicht so schlecht. Vielleicht ist es besser, es zu parsen und zu verwenden .to_i.send(duration_string) .

0 Stimmen

Ich verstehe, was Sie sagen, es ist anfällig für Injektionsangriffe, es wäre besser, es vorher mit Regex zu überprüfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X