Homepage Inspire-world | Forum
CGI/Perl Workshops Codeschnipsel zu Datum und Zeit

 Inhaltsverzeichnis/Codeschnipsel Übersichtsseite/Codeschnipsel zu Datum und Zeit
1. Einfache Datumsroutine
2. Erweiterte Datumsroutine
3. Datumsroutine basierend auf julianischer Kalenderberechnung

1. Einfache Datumsroutine
In vielen Scripten benötigt man statt der Unix Zeitangabe eine Routine die den Datum in einem beliebig formatierbaren String ausgibt.
# Datumsroutine

@tage = ('Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag');
@monate = ('Januar','Februar','Maerz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
($sec, $min, $stunde, $mtag, $mon, $jahr, $tag, $nr_tag, $isdst) = localtime(time);
if($stunde < 10) { $stunde = "0$stunde"; }
if ($min < 10) { $min = "0$min"; }
if ($sec < 10) { $sec = "0$sec"; }
$jahr = 1900 + $jahr;
$datum = "$tage[$tag], $mtag. $monate[$mon] , $jahr";
Je nachdem wie bei $datum die Variablen zusammengestellt werden erfolgt die Zeit/Datumsausgabe.
Top
2. Erweiterte Datumsroutine
Hier eine erweiterte Datumsroutine mit der man verschiedenste Datumsformate ausgeben kann.
@tagekurz = ('So','Mo','Di','Mi','Do','Fr','Sa');
@monatekurz = ('Jan.','Feb.','Maerz','Apr.','Mai.','Jun.','Jul.','Aug.','Sept.','Okt.','Nov.','Dez.');
@tage = ('Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag');
@monate = ('Januar','Februar','Maerz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
($sec, $min, $stunde, $mtag, $mon, $jahr, $tag, $nr_tag, $isdst) = localtime(time);
$monat = $mon+1;
if($monat < 10) { $monat = "0$monat"; }
if($stunde < 10) { $stunde = "0$stunde"; }
if ($min < 10) { $min = "0$min"; }
if ($sec < 10) { $sec = "0$sec"; }
$jahr = 1900 + $jahr;

# Ausgabe z.B. 17:39:43 Uhr Sonntag, 14. Juli , 2002
$datumlang = "$stunde:$min:$sec Uhr $tage[$tag], $mtag. $monate[$mon] , $jahr";

# Alle Datumswerte, Ausgabe z.B. Sonntag, 14. Juli , 2002
$datum = "$tage[$tag], $mtag. $monate[$mon] , $jahr";

# Ausgabe Monate in Kurzform, z.B. Sonntag, 14. Jul. , 2002
$datumkurz = "$tage[$tag], $mtag. $monatekurz[$mon] , $jahr";

# Ausgabe Tag + Monate in Kurzform, z.B. So, 14. Jul. , 2002 
$datumkurz_tag_mon = "$tagekurz[$tag], $mtag. $monatekurz[$mon] , $jahr";

# Ausgabe Tag + Monate in Kurzform, z.B. 14. 07. 2002 
$datum_tag_mon = "$mtag. $monat. $jahr";

# Ausgabe der Zeit in Sek. seit 1970
$zeit = time();
Hiermit kann man leicht das Datumsformat in verschiedenster weise darstellen.
Top
3. Datumsroutine basierend auf julianischer Kalenderberechnung
Eine Routine die die Julianische Kalenderberechnung nutzt.
Weitere interessante Infos zu Kalendern http://www.ortelius.de

Ausgabe diese Scriptes:
Heutiges: 17. November 2002
Heutiges Tageszahl: 2452596
Ablaufdatum :27. November 2002
Ablauf Tageszahl: 2452606

Mit diesen Zahlenwerten (2452596) lässt es sich nun gut rechnen.
#!/usr/bin/perl

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

print "Content-type: text/html\n\n";

# Tagesanzahl die zum Aktuellen Datum addiert werden soll
$addays = 10;

# Aufruf der einzelnen Werte aus den Subroutinen
$aktuelles_datum = &aktuelles_datum(); ($monat, $tag, $jahr) = &jdate($aktuelles_datum);
$startdatum = "$tag. $months[$monat] $jahr";
$ablaufdatum = &ablaufdatum();


# Ausgabe der Werte
print qq~
<font face="Verdana, Arial" size="2">
Heutiges: $startdatum<br>
Heutiges Tageszahl: $aktuelles_datum<br>
Ablaufdatum :$ablaufdatum<br>
Ablauf Tageszahl: $ablauf<br></font>
~;

# Gesamte Datumsberechnungs Subroutinen
sub ablaufdatum {

$ablauf = ($addays + $aktuelles_datum);
$j{'Julian'} = $ablauf;
($monat, $tag, $jahr) = &jdate($ablauf);
$ablaufdatum = "$tag. $months[$monat] $jahr";
return $ablaufdatum;
}

sub aktuelles_datum {
@months = ("0","Januar","Februar","Maerz","April","Mai","Juni",
"Juli","August","September","Oktober","November","Dezember");

local(@aktuelles_datum) = localtime(time);
local($tag) = $aktuelles_datum[3];
local($monat) = $aktuelles_datum[4];
local($jahr) = $aktuelles_datum[5];
$monat += 1;
$jahr += 1900;
&jday($monat,$tag,$jahr);
}

sub jday {
local($monat,$tag,$jahr) = @_;
local($jahra,$c);

if ($monat > 2) {
$monat -= 3;
} else {
$monat += 9;
--$jahr;
}

$c = int($jahr/100);
$ya = $jahr - (100 * $c);
$jd =  int((146097 * $c) / 4) +
int((1461 * $ya) / 4) +
int((153 * $monat + 2) / 5) +
$tag + 1721119;
$jd;
}

sub jdate {

local($jd) = @_;
local($jdate_tmp);
local($monat,$tag,$jahr);

$jdate_tmp = $jd - 1721119;
$jahr = int((4 * $jdate_tmp - 1)/146097);
$jdate_tmp = 4 * $jdate_tmp - 1 - 146097 * $jahr;
$tag = int($jdate_tmp/4);
$jdate_tmp = int((4 * $tag + 3)/1461);
$tag = 4 * $tag + 3 - 1461 * $jdate_tmp;
$tag = int(($tag + 4)/4);
$monat = int((5 * $tag - 3)/153);
$tag = 5 * $tag - 3 - 153 * $monat;
$tag = int(($tag + 5) / 5);
$jahr = 100 * $jahr + $jdate_tmp;
if($monat < 10) {
$monat += 3;
} else {
$monat -= 9;
++$jahr;
}
($monat, $tag, $jahr);
}



Top

 Zum Inhaltsverzeichnis/Codeschnipsel Übersichtsseite/Codeschnipsel zu Datum und Zeit
Autor: Helmut Walter Homepage Inspire-world Fragen, Anregungen und Hinweise bitte in das Forum

Valid HTML 4.0! Valid CSS!