Datum vergleichen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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

    Comment


    • #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.

      Comment


      • #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)

        Comment


        • #5
          Moin!

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


          Gruß,
          _Sietsch_

          Comment

          Working...
          X