S.Goertz: Mit Datum rechnen

Hallo,

gibt es mit PHP die Möglichkeit, die Differenz zwischen 2 Daten auszurechnen? Also beispielsweise 2002-09-22 minus 2002-09-11 ist gleich 11. Geht das, dass man auch die Anzahl der Tage herausbekommt, wenn das erste Datum Monat 09 und das zweite Monat 08 hat?

Ich habe in meinem schlauen Buch gelesen und leider ncihts finden können. Dann dachte ich mir, wenn es sowas gibt, dann wirds wohl irgendwen hier geben, der das weiß ;)

Danke schonmal!
Gruß,
  S.Goertz

  1. gibt es mit PHP die Möglichkeit, die Differenz zwischen 2 Daten auszurechnen?

    http://phpwizard.net/faq/differenz_datum.html

    Da mir die Daten aufgrund ihres Formats aus einer Datenbank zu kommen scheinen, wäre es noch besser, gleich dort die Tagesdifferenz berechnen lassen:

    mysql> SELECT TO_DAYS('2002-09-22')-TO_DAYS('2002-09-11') as diff_days;
    +-----------+
    | diff_days |
    +-----------+
    |        11 |
    +-----------+
    1 row in set (0.00 sec)

    mysql>

    1. Da mir die Daten aufgrund ihres Formats aus einer Datenbank zu kommen scheinen, wäre es noch besser, gleich dort die Tagesdifferenz berechnen lassen:

      Es geht darum, ein Datum aus der Datenbank auszulesen und vom jeweils aktuellen Datum abzuziehen. Das aktuelle Datum wird natürlich erst in der PHP-File berechnet. Das ganze soll dazu dienen, inaktive User nach 14 Tagen per Mail zu verwarnen udn nach 21 Tagen zu löschen.

      Ich werde das ganze mal mit timestamp versuchen...

      1. Das aktuelle Datum wird natürlich erst in der PHP-File berechnet.

        Natürlich? Auch die Datenbank sollte das aktuelle Datum kennen...

        Das ganze soll dazu dienen, inaktive User nach 14 Tagen per Mail
        zu verwarnen und nach 21 Tagen zu löschen.

        SELECT email FROM table WHERE TO_DAYS(NOW())-TO_DAYS(last_activity)>14;
        DELETE FROM table WHERE TO_DAYS(NOW())-TO_DAYS(last_activity)>21;

        Wozu PHP bemühen, wenn Deine Aufgabe Kernkompetenz einer Datenbank ist?

        1. Natürlich? Auch die Datenbank sollte das aktuelle Datum kennen...

          Ja, aber mit PHP komm ich besser klar ;)

          Wozu PHP bemühen, wenn Deine Aufgabe Kernkompetenz einer Datenbank ist?

          Weil ich mich z.Z. noch hauptsächlich mit PHP auskenne und das ganze deshalb auch mehr damit realisieren möchte.

          1. Hallo S. [habe leider vergessen, wie Du in Langversion heißt],

            wahrscheinlich solltest Du dich dann mit der Function

            mktime(int hour,
                   int minute,
                   int second,
                   int month,
                   int day,
                   int year,
                   [int is_dst]);

            beschäftigen.

            Sie liefert eine Datumsreferenzzahl. Es werden die Sekunden seit dem 01.01.1970 zurückgeliefert. Mit denen kannst Du dann rechnen. Das Ergebnis kann dann mit

            date(formatstring, Referenzzahl) wieder zurückgewandelt werden.

            Ich habe es noch nicht probiert. Wenn Du ein funktionstüchtiges Mustersript erstellt hast, wärs nett, wenn Du es mir für meine Sammlung schickst.

            Ab Seite 141 in Jörg Krauses Buch PHP4 steht alles soweit beschrieben, Auf Seite 913 findest Du dann die Funktionsreferenz.
            http://www.bitworks.de/literatur/php/php4.zip

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            1. Hallo S. [habe leider vergessen, wie Du in Langversion heißt],

              Ich heiße Sebastian, habe den Namen aber gleube ich hier noch nicht genannt *g*

              [...] Sie liefert eine Datumsreferenzzahl. Es werden die Sekunden seit dem 01.01.1970 zurückgeliefert. Mit denen kannst Du dann rechnen. [...]

              Ich habe es noch nicht probiert. Wenn Du ein funktionstüchtiges Mustersript erstellt hast, wärs nett, wenn Du es mir für meine Sammlung schickst.

              ---------------------------------------------------------------------
               $tyear = date("Y");
               $tmonth = date("m");
               $tday = date("d");
               $tdate = mktime(0, 0, 0, $tmonth, $tday, $tyear);

              $llyear = substr($datum, 6, 4);
                 $llmonth = substr($datum, 3, 2);
                 $llday = substr($datum, 0, 2);

              $lldate = mktime(0, 0, 0, $llmonth, $llday, $llyear);
               $dif = $tdate - $lldate;
               $min = $dif / 60;
               $h = $min / 60;
               $day = $h / 24;
              ---------------------------------------------------------------------

              die drei $ll...-Spalten teilen ein normales Datum ($datum) TT.MM.JJJJ in 3 teile ein. Anschließend wird die differenz berechnet und in verschiedene Einheiten umgewandelt:
              $day = Tage
              $h   = Stunden
              $min = Minuten
              $dif = Differenz = Sekunden

              Gruß,
               S.Goertz

    2. Danke, es funktioniert!
      http://fbos.emaniax.de/test.php