Datum vergleichen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datum vergleichen

    Moin!

    Ich hab hier eine kleine Unannehmlichkeit. Ich möchte wissen, ob ein Datum in der Vergangenheit oder in der Zukunft liegt:
    Ich hole mir das aktuelle Datum:
    PHP-Code:
    $today date("d.m.Y"); 
    Dann splitte ich mir das Ganze in einzelne Variablen:
    PHP-Code:
    list ($today_day$today_month$today_year) = split('[.]'$today); 
    Mache das Selbe mit dem zu vergleichendes Datum:
    PHP-Code:
    list ($my_day$my_month$my_year) = split('[.]'$myDate); 
    und will diese nun vergleichen.
    In PERL kann man den kompletten String, ohne Split und sonst was vergleichen. Geht das in PHP nicht auch irgendwie?
    Denn alle Fälle per Switch/Case abzufragen is ein Haufen Arbeit. Das sind viele, viele Fälle. Weil ja eben der 01.10.05 beispielweise größer ist der als der 31.01.05. Und so weiter...

    Wie macht man es also elegant??

    Grüße,
    _Sietsch_

  • #2
    wo kommt das datum her?
    benutze lieber von anfang an timestamps zum speichern von zeitpunkten.

    damit lässt sich beliebiger arithmetischer unfug anstellen.

    hier findest du viel interessantes:
    http://de2.php.net/manual/de/ref.datetime.php

    Kommentar


    • #3
      Beim Datumsformat (12.34.5678) zählt die erste Stelle 10fach, die zweite einfach, die dritte aber (ca.) 10*30fach, die vierte (ca.) 1*30fach, die fünfte 1000*12*30fach usw.

      Das verträgt sich überhaupt nicht mit den bekannten Vergleichsoperatoren (<,>,==,...). Die basieren auf dem Zehnersystem, in dem die linkeste Stelle die signifikanteste ist, je weiter rechts eine Ziffer in einer Zahl steht, desto weniger ist sie wert.
      Beispiel: die Zahl 12 - die 1 zählt 10fach, die 2 nur 1fach.

      Problem erkannt, und da liegt die Lösung auch gleich auf der Hand: Man muß aus dd.mm.yyyy einfach nur yyyy.mm.dd machen und schon ist auch hier die linkeste Stelle die signifikanteste. Das ist zwar nicht das Zehnersystem sondern teil das 30er, teil das 12er, aber das stört nicht, solange nur beide Vergleichspartner gleich viele Stellen haben und diese vom gleichen System sind.

      PHP-Code:
      // heute mal andersrum
      $today date("Ymd");

      // jetzt noch das Pendant umdrehen
      $someday explode('[.]'$myDate); // in Array zerlegen
      $someday array_reverse($someday); // umdrehen
      $someday implode(''$someday); // String basteln

      // und jetzt klappt das:
      if ( $today $someday ) echo 'war schon';
      elseif ( 
      $today == $someday ) echo 'ist grad';
      else echo 
      'kommt noch'
      Beachte: Beide Daten entweder yyyymmdd oder yymmdd, sonst gibts Murks.

      Kommentar


      • #4
        Also wie von penizilin geschrieben würde ich folgendes vorschlagen:
        PHP-Code:
        $datum_jetzt time();
        $datum_dann explode(".",$myDate);
        $timestamp_dann mktime(0,0,0,$datum_dann['tag'],$datum_dann['monat'],$datum_dann['jahr']);
        if(
        $datum_jetzt $timestamp_dann)
        {
            echo 
        "Datum liegt in der Vergangenheit";
        }
        else
        {
           echo 
        "Datum liegt in der Zukunft";

        Bei $datum_dann musst du natürlich noch schauen, welchen Index im Array Tag, Monat und Jahr haben, damit der Timestamp korrekt erstellt wird.

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Moin!

          Danke,
          jetzt tut das, wie es soll! :-)


          Gruß,
          _Sietsch_

          Kommentar

          Lädt...
          X