Homepage Inspire-world | Forum
CGI/Perl Workshops Sekunden zu Zeitangabe umrechnen

 Inhaltsverzeichnis/Workshops Übersichtsseite/Sekunden zu Zeitangabe umrechnen
In diesem Workshop will ich zeigen wie man eine vorhandene Sekundenangabe zurückrechnet in eine Zeitangabe die Wochen, Tage, Stunden, Minuten und Sekunden darstellt.

1. Zunächst einmal ein komplettes Beispielscript

#!/usr/bin/perl

#Fehlerausgabe an Browser
use CGI::Carp qw(fatalsToBrowser);

# Die Zeit in Sekundenangabe
$zeit_sec = 18940098;

# Aufruf der Subroutine "umrechnen mit dem Parameter $zeit_sec
# Zurueckgegeben werden die errechneten Werte  
($week,$day,$hour,$minute,$sec) = &umrechnen($zeit_sec);

# Aufruf der Subroutine die ermittelt ob fuer die Angaben
# Einzahl oder Mehrzahl erforderlich ist. Dazu werden die Werte
# fuer Woche und Tag an due Subroutine plural uebergeben
($woche,$tag) = &plural($week,$day);

# Ausgabe des Content Types
print "Content-type: text/html\n\n";

# Ausgabe des zurueckgelieferten Ergebnisses
print "$week $woche, $day $tag, und $hour:$minute:$sec Stunden";


# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Einzahl oder Mehrzahl? (Woche-Wochen, oder Tag-Tage)
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub plural {
($week,$day) = @_;

if ($week == 1) {
$woche = "Woche";
} else {
$woche = "Wochen";
}

if ($day == 1) {
$tag = "Tag";
} else {
$tag = "Tage";
}
return ($woche,$tag);
}

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Sekunden zu Zeitangabe umrechnen
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub umrechnen {
($zeit_sec) = @_;
$sec = $zeit_sec % 60;
$zeit_sec = ($zeit_sec - $sec) / 60;
$minute = $zeit_sec % 60;
$zeit_sec = ($zeit_sec - $minute) / 60;
$hour = $zeit_sec % 24;
$zeit_sec = ($zeit_sec - $hour) / 24;
$day = $zeit_sec % 7;
$week = ($zeit_sec - $day) / 7;
return ($week,$day,$hour,$minute,$sec);
}
Scriptausgabe: 31 Wochen, 2 Tage, und 5:8:18 Stunden



2. Hier nun das ganze etwas im Detail erläutert

Dieser Subroutinenaufruf empfängt in dem Abschnitt ($week,$day,$hour,$minute,$sec) die Werte die vom return ($week,$day,$hour,$minute,$sec); zurückgeliefert werden. Mit &umrechnen($zeit_sec); Wird die Subroutine aufgerufen und der Wert $zeit_sec übergeben.

($week,$day,$hour,$minute,$sec) = &umrechnen($zeit_sec);

Hier passiert das selbe nocheinmal, nur diemal für die Werte ob Woche - Wochen bzw. Tag - Tage angezeigt werden sollen.

($woche,$tag) = &plural($week,$day);

In dieser print Ausgabe werden nun die Werte ausgegeben.

print "$week $woche, $day $tag, und $hour:$minute:$sec Stunden";

Die nun folgende Subroutine empfängt in ($week,$day) = @_; Die übergebenen Werte.

Nun folgen zwei if-else Abfragen die je nach Anzahl der ermittelten Wochen oder Tage den entsprechenden Einzahl oder Mehrzahlwert zurückgeben bei return ($woche,$tag); Diese Subroutine kann man auch leicht für andere Zwecke umbauen. So z.B. für Ein Gästebuch oder Forum in dem die Eintragsanzahl angepasst dargestellt werden soll. So könnte dann ausgegeben werden: "Das Gästebuch hat 1 Eintrag" - oder - "Das Gästebuch hat 2 Einträge".
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Einzahl oder Mehrzahl? (Woche-Wochen, oder Tag-Tage)
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub plural {
($week,$day) = @_;

if ($week == 1) {
$woche = "Woche";
} else {
$woche = "Wochen";
}

if ($day == 1) {
$tag = "Tag";
} else {
$tag = "Tage";
}
return ($woche,$tag);
}
Diee Subroutine erledigt nun mittels einer Modulo(Rest) Rechnung und Division die Aufgabe des umrechnens von Sekunden in die Wochen, Tage, Stunden, Minuten und Sekunden. Am Schluss werden dann wieder per return ($week,$day,$hour,$minute,$sec); die Ergebnisse zurückgeliefert.
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Sekunden zu Zeitangabe umrechnen
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub umrechnen {
($zeit_sec) = @_;
$sec = $zeit_sec % 60;
$zeit_sec = ($zeit_sec - $sec) / 60;
$minute = $zeit_sec % 60;
$zeit_sec = ($zeit_sec - $minute) / 60;
$hour = $zeit_sec % 24;
$zeit_sec = ($zeit_sec - $hour) / 24;
$day = $zeit_sec % 7;
$week = ($zeit_sec - $day) / 7;
return ($week,$day,$hour,$minute,$sec);
}



 Zum Inhaltsverzeichnis/Workshops Übersichtsseite/Sekunden zu Zeitangabe umrechnen
Autor: Helmut Walter Homepage Inspire-world Fragen, Anregungen und Hinweise bitte in das Forum

Valid HTML 4.0! Valid CSS!