Philippè: MySQL: Timestamp funktioniert nicht (Falsches Datum/Zeit)

Hallo,

ich versuche mit PHP einen TIMESTAMP in eine MySQL-Tabelle zu schreiben.
Leider funktioniert es nicht. Wenn ich bei der Query CURRENT_TIMESTAMP eingebe ("INSERT INTO news (date, user, title, text) VALUES (CURRENT_TIMESTAMP, '".$user."', '".$title."', '".$text."')"), erhalte ich das Datum/die Zeit "2038-01-19 04:14:07" (formatiert). Wenn ich anstatt CURRENT_TIMESTAMP die time()-Funktion von PHP nutze, bekomme ich "1970-01-01 01:00:00".
Nun ist das entweder der Anfang oder das Ende der Unix-Zeit, aber nicht die aktuelle.
Wenn ich es weglasse, also die Zeit bei INSERT oder UPDATE nicht mit aktualiere, bekomme ich wieder ein "1970-01-01 01:00:00".
Kann mir jemand helfen?

Danke im Voraus.

MfG

  1. Hello,

    welchen Datentyp hat Dein Feld in der DB?

    Du weißt schon, dass man keine Spalte "date" nennen sollte? Schau Dir mal die reservierten Worte von MySQL an.

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

    Tom

    --
    [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
      Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
      Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. welchen Datentyp hat Dein Feld in der DB?

      Du weißt schon, dass man keine Spalte "date" nennen sollte?

      Hallo,

      danke für den Tipp. Habe es gleich mal in timedate geändert. Das MySQL-Feld ist vom Typ TIMESTAMP.
      Wenn ich beim Query NULL eingebe (wie im Handbuch beschrieben, d.h. "timedate = NULL", erhalte ich wieder "2038-01-19 04:14:07".

      1. Hello,

        Wenn ich beim Query NULL eingebe (wie im Handbuch beschrieben, d.h. "timedate = NULL", erhalte ich wieder "2038-01-19 04:14:07".

        Das darf eigentlich nicht sein beim Typ TIMESTAMP. Da sollte bei Eingabe von NULL in das _erste_ Timestamp-Feld der Tabelle eigentlich das aktuelle Datum verarbeitet werden.

        Der MySQL Timestamp ist aber folgendermaßen aufgebaut: JJJJMMTTHHMMSS

        Wenn Du damit rechnen willst, solltst Du ihn vorher mit UNIX_TIMESTAMP(feldname) umwandeln in den üblichen.

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

        Tom

        --
        [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
          Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
          Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        1. Wenn Du damit rechnen willst, solltst Du ihn vorher mit UNIX_TIMESTAMP(feldname) umwandeln in den üblichen.

          Ich hab noch mal genauer geguckt, und das Datum wird korrekt eingetragen (z.B. "20040516225517").
          Das Problem ist aber, wie ich es wieder rauskriege.
          Ich habe es mit "date("Y-m-d H:i:s", $result->timedate)" probiert, was dann aber zu Fehlern führt...;)

          Ich würde das Datum/die Zeit gerne mit PHP formatieren und nicht mit MySQL, d.h. das Format nicht ins Query tun.

          1. Hello,

            ich weiß nicht, ob es eine fertige Funktion in PHP gibt, aber das das Format in MySQL doch recht simpel ist, kannst Du dir in PHP doch neine Darstellungsfunktion bauen.

            function date2str($timestamp,$format=1)
            {
              $ret = "";

            switch ($format)
              {
                case 1:
                  $ret = substr($timestamp,6,2).".".
                         substr($timestamp,4,2).".".
                         substr($timestamp,0,4);
                break;

            case 2:
                  $ret = substr($timestamp,6,2).".".
                         substr($timestamp,4,2).".".
                         substr($timestamp,0,4)." ".
                         substr($timestamp,8,2).":".
                         substr($timestamp,10,2).":".
                         substr($timestamp,12,2);
                break;

            case 3:
                  $ret = substr($timestamp,8,2).":".
                         substr($timestamp,10,2).":".
                         substr($timestamp,12,2);
                break;

            default:
                  $ret = substr($timestamp,6,2).".".
                         substr($timestamp,4,2).".".
                         substr($timestamp,0,4);
              }
              return $ret;
            }

            Nur so also Idee.

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

            Tom

            --
            [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
              Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
              Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          2. Hallo!

            Ich habe es mit "date("Y-m-d H:i:s", $result->timedate)" probiert, was dann aber zu Fehlern führt...;)

            Weil date() ein UNIX_TIMESTAMP erwattet.

            Ich würde das Datum/die Zeit gerne mit PHP formatieren und nicht mit MySQL, d.h. das Format nicht ins Query tun.

            http://www.dclp-faq.de/q/q-datum-mysql.html

            MfG, André Laugks

            --
            L-Andre @ gmx.de
            1. Hallo!

              Ich würde das Datum/die Zeit gerne mit PHP formatieren und nicht mit MySQL, d.h. das Format nicht ins Query tun.

              http://www.dclp-faq.de/q/q-datum-mysql.html

              Das wolltest Du ja nicht! Aber wieso nicht?

              ansonsten:

              SELECT UNIX_TIMESTAMP(timestampSpalte) AS ts FROM tabelle;

              MfG, André Laugks

              MfG, André Laugks

              --
              L-Andre @ gmx.de
          3. Danke @all

            MfG Philippè