Peter: Tagesdifferenz zwischen beliebigem und aktuellem Datum berechnen

Guten Tag euch allen!

Ich überlege schon länger wie ich es hinkriegen könnte, die Differenz zwischen eines beliebigen Datums und dem aktuellem Datum zu berechnen. Sinn der Sache ist die Berechnung von Tagen bis einem beliebigen Geburtstag bzw. wie lange dieser schon her ist.

Danke euch schon einmal für eure Hilfe!

Peter

  1. Hi,

    Ich überlege schon länger wie ich es hinkriegen könnte, die Differenz zwischen eines beliebigen Datums und dem aktuellem Datum zu berechnen. Sinn der Sache ist die Berechnung von Tagen bis einem beliebigen Geburtstag bzw. wie lange dieser schon her ist.

    keine Ahnung, wie das mit PHP geht, aber der Algorithmus ist wohl wie bei Perl:

    -Daten in TimeStamp (Sekunden seit 1.1.1970) wandeln
    -Differenz bilden
    -Sekunden in Tage umrechnen

    Gruß
    Reiner

  2. Moin,

    Ich überlege schon länger wie ich es hinkriegen könnte, die Differenz zwischen eines beliebigen Datums und dem aktuellem Datum zu berechnen.

    Mit time() kriegst du bekanntlich den aktuellen Timestamp. Jetzt brauchst du noch den Timestamp des anderen Datums. Kurz' in der Funktionsreferenz stöbern: mktime() ist das was du willst.

    Dann hast du zwei Sekundenangaben von einem fixen Zeitpunkt aus: Differenz bilden, durch die Anzahl der Sekunden pro Tag teilen und fertig.

    --
    Henryk Plötz
    Grüße aus Berlin
    ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
    ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
  3. Guten Tag euch allen!

    Ich überlege schon länger wie ich es hinkriegen könnte, die Differenz zwischen eines beliebigen Datums und dem aktuellem Datum zu berechnen. Sinn der Sache ist die Berechnung von Tagen bis einem beliebigen Geburtstag bzw. wie lange dieser schon her ist.

    Danke euch schon einmal für eure Hilfe!

    Peter

    Guckst Du hier:
    Als erstes musst Du wissen, dass Unix die Zeit in Sekunden erfasst und zwar in Sekunden seit dem 01.01.1970. Daher kommen diese Riesenzahlenwerte. Tage vor dem 01.01.1970 werden einfach als negativ Zahlen erfasst.
    Nun zur Erklärung mit ein paar Umwegen, dafür aber verständlicher:

    // Wir holen uns den Timestamp und zwar direkt im mysql-Format
    // Wenn Du direkt den timestamp nimmst (now()), fällt der nächste //Schritt weg

    $dat=date("Y-m-d H:m:s");
    // Aus dem mysql-Format machen wir wieder den Timestamp
    $now = strtotime($dat);
    // Dann nehmen wir ein Differenzdatum, hier ein Eintrag aus einem //Array
     $alt = strtotime($sba_akten["e_datum"]);
    // Nun ziehen wir das jüngere Datum von dem Älteren Datum ab, und Teilend as durch die Sekunden eines Tages. Das Ergebnis ist die Anzahl der Tage zwischen den beiden Datümern (heißt das so?)
     $alter_tage = ($now-$alt) / 86400;
    // Fertig

    1. Guten Abend!

      Ich danke euch für eure Hilfe, allerdings habe ich es noch nicht ganz geschafft. Ich habe nun folgendes:
      $tage_jetzt = time();
      $tage_gtag = mktime(0,0,0,$gebmon,$gebtag,$gebjahr);
      $tage_diff = ($tage_jetzt-$tage_gtag)/86400;
      echo $tage_diff;

      Die Variablen $gebmon, $gebtag und $gebjahr gibt es definitiv.
      Durch den Befehl $tage_diff sollte mir eigentlich (so hatte ich es mir gedacht) die Tagesdifferenz ausgegeben werden.
      Allerdings wird mir irgendeine Zahl im 6000er-Bereich ausgegeben.

      Was mache ich falsch?

      MfG
      Peter

      1. Hi,

        ich habe Dein Script gerade mal ausprobiert und bei mir klappts.
        Um es dautlicher zu machen kannst Du das Ganze evtl. noch auf volle Tage runden:
        $tage_diff = round((($tage_jetzt-$tage_gtag)/86400),0);

        Aber wie gesagt, ich habe die Variablen $geb... durch Zahlen ersetzt und das Ergebnis hat immer gestimmt.
        Habs auch mal in Jahren ausprobiert (/365) und auch das kam
        super hin.

        Ich denke Du hast es!
        Wenn das Ergebnis absolut nicht stimmt, musst du mal den Unix-Timestamp des Servers prüfen.

        Ein Problem hast Du allerdings, wenn Du ein Datum vor 1970 hast.
        In einem solchen Fall musst Du erstmal das Jahr checken, dann den Zeitraum von 1970 rechnen und dann nochmal die Anzahl der Tage/Jahre von e.g. 1967 bis 1970 addieren.

        Da Du ja hier scheinbar mit beliebigen Geburtsdaten hantierst, solltest Du das auf jeden Fall einbauen.

        1. Guten Tag

          Wenn das Ergebnis absolut nicht stimmt, musst du mal den Unix-Timestamp des Servers prüfen.

          Das Ergebnis stimmte wohl wirklich, mir ist aber leider ein kleiner Denkfehler unterlaufen:
          Es muss nicht
          mktime(0,0,0,$gebmon,$gebtag,$gebjahr);
          sondern
          mktime(0,0,0,$gebmon,$gebtag,date(Y));
          heißen, denn ich will ja nur die Tage bis zu dem Geburtstag in dem laufenden Jahr haben.

          Ein Problem hast Du allerdings, wenn Du ein Datum vor 1970 hast.
          In einem solchen Fall musst Du erstmal das Jahr checken, dann den Zeitraum von 1970 rechnen und dann nochmal die Anzahl der Tage/Jahre von e.g. 1967 bis 1970 addieren.

          Da Du ja hier scheinbar mit beliebigen Geburtsdaten hantierst, solltest Du das auf jeden Fall einbauen.

          Das habe ich noch nicht ganz verstanden. Zudem unterstützt Windows doch keinen Zeitstempel vor 1970, oder?

          MfG

          Peter

          1. Hallo

            Das habe ich noch nicht ganz verstanden. Zudem unterstützt Windows doch keinen Zeitstempel vor 1970, oder?

            Damit hast Du vollkommen recht. Bei Zeiten vor dem 1.1.1970 streikt PHP unter Windows. Ist mir auch passiert.

            fastix®

      2. Hallo Peter,

        Die Variablen $gebmon, $gebtag und $gebjahr gibt es definitiv.

        was steht da drin?

        Durch den Befehl $tage_diff sollte mir eigentlich (so hatte ich es mir gedacht) die Tagesdifferenz ausgegeben werden.

        wird auch...

        Allerdings wird mir irgendeine Zahl im 6000er-Bereich ausgegeben.

        dann hast du als Jahr irgendwas mit 1985 +/-2 angegeben?
        das sind nun einmal so viele Tage...

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|