Scripttip: Countdown in Ruby

Wie lange dauert es noch bis zum Release, Launch, Geburtstag… Die Dauer bis zu einem Event lässt sich sehr gut mit einem Countdown visualisieren. Um die Restzeit nicht selber in Minuten, Sekunden, etc. umzurechnen kann in Ruby hierfür das gem ‚chronic_duration‘ eingesetzt werden.

Falls nicht schon vorhanden muss erst das gem installiert werden:

[bash]
gem install chronic_duration # ggf. ein ’sudo‘ voranstellen
[/bash]

Wenn die Dauer für den Countdown bekannt ist, kann man diese direkt verwenden:
[ruby]
# Die benötigten Bibliotheken
require ‚rubygems‘
require ‚chronic_duration‘
require ‚time‘

dauer = 180 # Die Dauer in Sekunden

# Hier wird nun jede Sekunde die Restzeit berechnet und ausgegeben
dauer.times {|x| sleep 1; puts ChronicDuration.output(dauer – x)}

# Ausgabe
3 mins
2 mins 59 secs
2 mins 58 secs
2 mins 57 secs
2 mins 56 secs
2 mins 55 secs
2 mins 54 secs
2 mins 53 secs
2 mins 52 secs

2 mins 2 secs
2 mins 1 sec
2 mins
1 min 59 secs
1 min 58 secs

1 min 2 secs
1 min 1 sec
1 min
59 secs
58 secs

3 secs
2 secs
1 sec
[/ruby]

Wenn Anfangs- und Zielzeit verwendet werden sollen, müssen wir erst die Countdown-Zeit berechnen:

[ruby]
# Die benötigten Bibliotheken
require ‚rubygems‘
require ‚chronic_duration‘
require ‚time‘

# Anfangs- und Zieldatum setzen und die Differenz berechnen
anfangsDatum = Time.now
=> Thu Sep 09 10:13:23 +0200 2010

zielDatum = Time.parse ‚2010-09-10 08:02:00 +0100‘
=> Fri Sep 10 09:02:00 +0200 2010

countdownZeit = (zielDatum – anfangsDatum).to_i # Ergebnis auf volle Sekunden gerundet
=> 82116

# Hier wird nun jede Sekunde die Restzeit berechnet und ausgegeben
countdownZeit.times {|x| sleep 1; puts ChronicDuration.output(countdownZeit – x)}

# Ausgabe
22 hrs 48 mins 36 secs
22 hrs 48 mins 35 secs
22 hrs 48 mins 34 secs
22 hrs 48 mins 33 secs
22 hrs 48 mins 32 secs

[/ruby]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.