Thomas: Datum berechnen und in DB schreiben

Hallo.
Ich möchte über PHP das aktuelle Datum ermitteln und in einer MySQL-Datenbank speichern.
Dann möchte ich ein Datum in der Zukunftz (z.B. 3 Tage später) errechnen und dieses ebenfalls in der Datenbank ablegen.
Ich versuche es schon seit Tagen mit den Befhelen aus einem PHP-Buch, komme aber nicht wirklich weiter.

  • Wie bekomme ich das aktuelle Datum?
  • Wie errechne ich das zukünftige Datum?
  • in welcher Form schreibe ich das Datum in die Datenbank?
  • welchen Datentyp muss ich in der Datenbank verwenden (date?)
  • wie kann ich zwei Datum-Variablen in Bezug auf früher oder später vergleichen?

Vielen Dank vorab für alle hilfreichen Beiträge,
Thomas

  1. du darfst das datum nicht einfach so in die datenbank speicher sonder in sekunden seid 1.1.1970. und dan mit den funktionen mktime time und date arbeiten!!

    ich hoffe das hilft dir

    1. du darfst das datum nicht einfach so in die datenbank speicher sonder in sekunden seid 1.1.1970. und dan mit den funktionen mktime time und date arbeiten!!

      ich hoffe das hilft dir

      Sorry, nicht wirklich.
      Mit mktime und date hab ich schon rumprobiert, aber nichts gescheites auf die Reihe gebracht.

      Wie ermittle ich die Sekunden seit 1.1.1970?
      Und wie muss ich das Datum formatieren um es abzulegen?
      Gibts da vielleicht irgendwo einen Beispiel-Code.
      Das würde mir wahrscheinlich am meisten helfen.

      1. z. b.

        test = 154846484 = mktime()
        19.04.2004 = date("j.n.Y",test)

        also mit mktime() bekommst du die aktuelle zeit, um 3 tage drauf zu rechnen machst du 60*60*24*3+ die zahl von mktime()
                          se mi h  d
        um die zahl die 11 stellig ist wieder in ein datum umzuwandel nimst du date(ausgabeformat, variable)
        j = tag mit 00
        n = monat 00
        Y = jahr 0000

        1. z. b.

          test = 154846484 = mktime()
          19.04.2004 = date("j.n.Y",test)

          also mit mktime() bekommst du die aktuelle zeit, um 3 tage drauf zu rechnen machst du 60*60*24*3+ die zahl von mktime()
                            se mi h  d
          um die zahl die 11 stellig ist wieder in ein datum umzuwandel nimst du date(ausgabeformat, variable)
          j = tag mit 00
          n = monat 00
          Y = jahr 0000

          Vielen Dank, das hat mir jetzt sehr weitergeholfen.

          1. Hi Thomas,

            schau Dir die SQL-abhängige Lösung nochmal an, bevor Du weiterprogrammierst. Die Laufzeiten sind wesentlich schneller. Also wenn Du das Datum nicht unbedingt im PHP bearbeiten musst, lass es sein ;)

            http://forum.de.selfhtml.org/my/?t=79062&m=457825

            Du kannst die Ausgabe der Datetime felder auch mit DATE_FORMAT(datum1, "%d.%m.%Y") exakt gleich formatieren, wie mit date.

            Gruss
            Stefan

            1. Hi Thomas,

              schau Dir die SQL-abhängige Lösung nochmal an, bevor Du weiterprogrammierst. Die Laufzeiten sind wesentlich schneller. Also wenn Du das Datum nicht unbedingt im PHP bearbeiten musst, lass es sein ;)

              http://forum.de.selfhtml.org/my/?t=79062&m=457825

              Du kannst die Ausgabe der Datetime felder auch mit DATE_FORMAT(datum1, "%d.%m.%Y") exakt gleich formatieren, wie mit date.

              Klar. Ich werd mir beide Lösungen mal anscheuen.
              Ist ja nie verkehrt wenn man mehrere Wege kennt ;-)
              Danke,
              Thomas

    2. Hello,

      du darfst das datum nicht einfach so in die datenbank speicher sonder in sekunden seid 1.1.1970. und dan mit den funktionen mktime time und date arbeiten!!

      Wer sagt das denn? Wozu ist denn dann der Datentyp date da?

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

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  2. Hallo Thomas,

    Ich möchte über PHP das aktuelle Datum ermitteln und in einer MySQL-Datenbank speichern.

    warum lässt du mysql nicht selbst das Datum ermitteln?

    • Wie bekomme ich das aktuelle Datum?

    mit time()[1] bekommst du den aktuellen Timestamp, und mit date()[2] kannst du ihn dir formatieren (in mysql: NOW()[3])

    • Wie errechne ich das zukünftige Datum?

    mit strtotime('+3 days')[4] o.ä. (mysql: mit ADDDATE(NOW(),INTERVAL 3 DAY)[5] (beides ungetestet)

    • in welcher Form schreibe ich das Datum in die Datenbank?

    als Datum :-)

    • welchen Datentyp muss ich in der Datenbank verwenden (date?)

    ja (oder DATETIME wenn du die Zeit auch brauchst)

    • wie kann ich zwei Datum-Variablen in Bezug auf früher oder später vergleichen?

    wenn du z.B. alle Datensätze haben willst, die älter als 5 Tage sind, kannst du die z.B. mit "... WHERE datum < DATE_SUB(NOW(), INTERVAL 5 DAY)"[6] abfragen.
    Wenn du erst in php damit arbeiten willst, kannst du die Zeiten auch als Timestamp abfragen (->UNIX_TIMESTAMP(datum)).

    Grüße aus Nürnberg
    Tobias

    [1] http://www.php.net/time
    [2] http://www.php.net/date
    [3] http://www.mysql.de/doc/en/Date_and_time_functions.html#IDX1384
    [4] http://www.php.net/strtotime
    [5] http://www.mysql.de/doc/en/Date_and_time_functions.html#IDX1353
    [6] http://www.mysql.de/doc/en/Date_and_time_functions.html#IDX1391
    [7] http://www.mysql.de/doc/en/Date_and_time_functions.html#IDX1402

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

    bei schreiben in die Datenbank schreibst Du einfach:

    "INSERT INTO ... (..., datum1, datum2) VALUES (..., NOW(), NOW() + INTERVAL 3 DAY);"

    Damit hast Du dann alles innerhalb des SQL erledigt und brauchst nicht PHP berechnen lassen, kostet nur Zeit.

    Als Datentyp empfehle ich Dir 'datetime' dann hast Du auch die Zeit des Eintrages dabei, kann mitunter wichtig sein.

    Ein Vergleich läuft genauso, Beispiele:

    1. "SELECT ... WHERE datum1 < NOW();"  // Älter als JETZT
    2. "SELECT ... WHERE datum2 > NOW();"  // Neuer als JETZT
    3. "SELECT ... WHERE NOW() BETWEEN datum1 AND datum 2;"  // Dazwischen

    Viele Grüße
    Stefan