Justus: Datumsabfrage

Hallo!

Ich habe ein Problem, wenn ich mit dem Datum rechnen will.
Meine beiden Variablen: 01.05.2008($heute) und 15.05.2008($spaeter)
Dann mache ich eine Abfrage :
if($heute < $spaeter)
{echo "01.05.2008 ist kleiner als 15.05.2008"}
else
{echo "01.05.2008 ist nicht kleiner als 15.05.2008"}

eigentlich ist 01.05.2008 "kleiner" als 15.05.2008 aber es wird der else teil ausgeführt, was ich nicht ganz verstehe!

Kann man denn überhaupt ein Datum mit kleiner und größer vergleichen?
danke tom

  1. Hi,

    eigentlich ist 01.05.2008 "kleiner" als 15.05.2008 aber es wird der else teil ausgeführt, was ich nicht ganz verstehe!

    Kann man denn überhaupt ein Datum mit kleiner und größer vergleichen?

    nein, entweder Du vergleichst time() (Sekunden seit 1970), rechnest Dein Datum mit mktime()in Sekunden seit 1970 um, oder machst zum Vergleich sowas mit date(): $d = date("Ymd"); das ergibt einen Zeitstempel wie 20080501, den kannst Du dann mit grösser/kleiner vergleichen.

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
    1. »»entweder Du vergleichst time() (Sekunden seit 1970), rechnest Dein Datum mit mktime()in Sekunden seit 1970 um, oder machst zum Vergleich sowas mit date(): $d = date("Ymd"); das ergibt einen Zeitstempel wie 20080501, den kannst Du dann mit grösser/kleiner vergleichen.

      Gruesse, Joachim

      Vielen Dank, mit den Sekunden klappts super! Das war der trick.

  2. Hello,

    Ich habe ein Problem, wenn ich mit dem Datum rechnen will.

    Du rechnest ja gar nicht, sondern Du vergleichst.
    Und du vergelichst auch nicht Werte im Datumstyp (den hat PHP nämlich gar nicht), sondern Du vergleichst zwei Strings.

    if($heute < $spaeter)

    entweder, Du baust diese Strings ins ANSI-Format um, also YYYYMMTT oder auch YYYY-MM-TT, oder aber Du musst sie umrechnen lassen in eine Datumsreferenzzahl. Da bietet sich in einem leider sehr eingeschränkten Wertebereich der Unix-Timestamp an.

    PHP kennt eine sehr mächtige Funktion für die Umwandlung: strtotime()
    http://de3.php.net/manual/en/function.strtotime.php

    Ein harzliches Glückauf

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo Tom,

      PHP kennt eine sehr mächtige Funktion für die Umwandlung: strtotime()

      das Adjektiv "mächtig" in Verbindung mit EDV löst oft und völlig zu recht spontanen Brechreiz aus!
      "mächtig" svw. 'alles nicht oder' ... ;-)

      http://de3.php.net/manual/en/function.strtotime.php

      wie ich schon vermutete:
      Parse about any English textual datetime description into a Unix timestamp
      Was problemlos mit "unbrauchbar" übersetzt werden kann ... ;-)

      Also muss man als German User sich was eigenes basteln:

      <?php  
      function get_Date($string) {  
          $d=1; $m=1; $y=0;  
          @list($d,$m,$y) = explode('.',trim($string));  
          return mktime(0,0,0,intval($m),intval($d),intval($y));  
      }  
      ?>
      

      Diese Funktion funktioniert auch wenn man 'Blödfug' eingibt ... ;-)

      mbG Rolf

      1. Hello Rolf,

        Also muss man als German User sich was eigenes basteln:

        Ich kann Dir da nicht ganz folgen:

          
        <?php   ### strtotime.php ###  
          
        $timestamp = strtotime('01.05.2008');  
        echo "<br>$timestamp = ".date('d.m.Y' ,$timestamp);  
          
        $timestamp = strtotime('30.05.2008');  
        echo "<br>$timestamp = ".date('d.m.Y' ,$timestamp);  
          
        $timestamp = strtotime('31.12.2008');  
        echo "<br>$timestamp = ".date('d.m.Y' ,$timestamp);  
          
        $timestamp = strtotime('12.01.2009');  
        echo "<br>$timestamp = ".date('d.m.Y' ,$timestamp);  
          
        ?>  
        
        

        ergibt bei mir:

        1209592800 = 01.05.2008
        1212098400 = 30.05.2008
        1230678000 = 31.12.2008
        1231714800 = 12.01.2009

        Und gegen das Ergebnis habe ich nichts einzuwenden.
        Wieso soll ich da eine eigene Funktion schreiben?

        Ein harzliches Glückauf

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hallo Tom,

          Wieso soll ich da eine eigene Funktion schreiben?

          weil Du dem PHP-Manual vertraust!
          Alles andere wäre nicht vorhersehbar ... :-(

          mbG Rolf

          1. Hallo Tom,

            Wieso soll ich da eine eigene Funktion schreiben?
            weil Du dem PHP-Manual vertraust!
            Alles andere wäre nicht vorhersehbar ... :-(

            wie man z.B. auch hier sehen kann!

            Okay, auf einer privaten Maschine und unter Ausschluss anderer Nutzer,
            bekommt man alles irgendwie "hinkonfiguriert", siehe Uri Gellert ... ;-)

            mbG Rolf

  3. echo $begrüßung;

    Meine beiden Variablen: 01.05.2008($heute) und 15.05.2008($spaeter)
    Dann mache ich eine Abfrage :
    if($heute < $spaeter)
    {echo "01.05.2008 ist kleiner als 15.05.2008"}
    else
    {echo "01.05.2008 ist nicht kleiner als 15.05.2008"}

    eigentlich ist 01.05.2008 "kleiner" als 15.05.2008 aber es wird der else teil ausgeführt, was ich nicht ganz verstehe!

    Ich auch nicht, denn ich kann das Verhalten nicht nachvollziehen.

    $heute = '01.05.2008';
      $spaeter = '15.05.2008';
      var_dump($heute < $spaeter);

    ergibt als Ausgabe ein true.

    Kann man denn überhaupt ein Datum mit kleiner und größer vergleichen?

    Ja, aber einem handelsüblichen Computer fehlt heutzutage immer noch die Intelligenz, aus einer simplen, nicht näher spezifizierten Zeichenfolge die Bedeutung "Datum" herauszulesen, um die Regeln eines Datumsvergleichs darauf anwenden zu können. Alternativen wurden ja bereits genannt.

    echo "$verabschiedung $name";