[PERL] Vergleich zweier Datumsangaben

Hi ale zusammen :wink:

Wie kann man möglichst einfach zwei Datumsangaben miteinander vergleichen?
Mal angenommen ich habe ein heute, also 18.08.2000 und ein anderen Tag, z.B. den 05.09.2000 und möchte nun einfach wisssen, ob das 2.Datum schon ‚passiert‘ ist oder noch ‚passieren wird‘. Und wenns noch passiert, wie viele Tage es noch dauert bis …
gibt es da vielleicht schon eine eingebaute Funktion für?

Wenn nicht, dann würde ich so eine komplizierte Sache machen wie:
split(/./,$datum) und dann mit verschachtelten IF abfrgaen vergleichen wie, was wann und warum passiert ehehehe…

also, gibts da eine gescheite funktion???

cuuu
Martin

Hi,

Wie kann man möglichst einfach zwei Datumsangaben miteinander
vergleichen?

Verwandle beide Datumsangaben ins Unix-Format (gibt’s bestimmt einen Befehl). In diesem Format werden die (Mikro? -) Sekunden gezaehlt, die seit dem 1.1.1970 verstrichen sind, es ist also eine Zahl, die man leicht mit anderen Zahlen vergleichen kann.

Grüsse,
Franz Prilmeier

jo, genau sowas hab ich mir auch schon mal gedacht, nur weiss ich eben nicht wie ich diese Zeit dahingehend umwandeln kann :frowning:
Vielleicht weiss es ja noch Jemand *hoff*

bye,
Martin

Folgende Funktionen könnten für Dich interessant sein (genauerer Infos mit perldoc -f FUNKTION)

time, localtime

Arne

jo, genau sowas hab ich mir auch schon mal gedacht, nur weiss
ich eben nicht wie ich diese Zeit dahingehend umwandeln kann

(

Vielleicht weiss es ja noch Jemand *hoff*

Wenn’s keine vordefinierte Funktion dafür gibt, dann machen wir halt eine:

sub Unixtime {
 my $uTime = 0;
 my ($tag, $monat, $jahr) = @\_;
 my @monate = ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
 #Schaltjahre rausfiltern
 if ( $jahr % 4 == 0 && $jahr % 100 != 0 && $jahr % 400 == 0 ) {
 $uTime = 1;
 }
 #Monate berechnen
 for ( $i = 0; $i 

geht bestimmt einfacher!

Grüsse,
Franz Prilmeier

Hi,

Verwandle beide Datumsangaben ins Unix-Format (gibt’s bestimmt
einen Befehl).

nein, aber diverse Module; beispielsweise HTTP::smiley:ate und Time::Local.

In diesem Format werden die (Mikro? -) Sekunden gezaehlt,

Sekunden ist richtig,

die seit dem 1.1.1970 verstrichen sind,

das hingegen nur in der Regel. Es werden die Sekunden „since epoch“ gezählt, was auf den meisten Systemen zwar der 1.1.1970 ist, aber eben nicht auf allen.

es ist also
eine Zahl, die man leicht mit anderen Zahlen vergleichen kann.

Dies ist die Hauptsache.

Cheatah

Hallo Martin,

Wie kann man möglichst einfach zwei Datumsangaben miteinander
vergleichen?

#/usr/bin/perl
use Time::Local;

$datum1=$ARGV[0]||"12.01.00";
$datum2=$ARGV[1]||"20.2.00";

sub date2sek
{
 $datum=shift||die "Keine Argumente\n";
 ($tag,$monat,$jahr)=split(/\./,$datum);
 $sek = $min = $stunde = 0;
 $unixsekunden=timelocal($sek,$min,$stunde,$tag,$monat-1,($jahr $unixsekunden -\> $date\n";
 return $unixsekunden;
}

if (&date2sek($datum1) \> &date2sek($datum2) )
{ print "$datum1 \> $datum2\n";}
else 
{ print "$datum1 

Beispiel:



    
    C:\\>perl datum.pl
    12.01.00 -\> 947631600 -\> Wed Jan 12 00:00:00 2000
    20.2.00 -\> 951001200 -\> Sun Feb 20 00:00:00 2000
    12.01.00 
    Die Sekundenschreibweise funktioniert fuers Datum auf Unix-Systemen und meinem WinPerl aber nur ab dem 1.1.1970 bis ins Jahr 2037:
    
    
        
        C:\\>perl datum.pl "29.02.1969"
        Can't handle date (0, 0, 0, 29, 1, 69) at datum.pl
    
    
    
    
    
    
    > wie viele Tage es noch dauert bis ...
    
    Entweder mit den Unixsekunden von oben spielen und umrechnen
    oder das Date-Modul vom CPAN installieren. Dann gehts so:
    
    
    
        
        use Date::Calc qw(Delta\_Days);
        @date1=(1981,2,23);
        @date2=(1981,2,24);
        $days=Delta\_Days( @date1,@date2);
        
        print "Es sind $days Differenz zwischen ",@date1," und ",@date2,"\n";
    
    
    
    
    Das sollte genuegen :wink:
    
    -Andreas.

cool, dange :wink:

damit kann ich jetzt arbeiten :wink:))

danke nochmal,
byee