Bernhard Peissl: time() und date() - fehler bei umrechnung von timestamp in datum

Hallo PHP & system experten,

habe einige anomalien in meinem logfile gefunden. ich gebe dort sowohl mit time() einen timestamp als auch ein mit date() formatiertes datum aus. allerdings ist das mit date() formatierte datum nicht synchron mit der systemzeit.

das apache log stimmt z.b. 1:1 mit dem timestamp überein, allerdings NICHT mit dem über date() ermittelten formatierten datums.

Beispielcode:

echo "date (systemzeit): ". date("Y-m-d H:m:s") . "---" . time(). "\n";
echo "date (timestamp):  ". date("Y-m-d H:m:s" , time() ) . "---" . time(). "\n";

Ausgabe:

date (systemzeit): 2005-08-02 15:08:43---1122988003
date (timestamp):  2005-08-02 15:08:43---1122988003

Wenn man nun einen externen timestamp-to-date converter bemüht erhält man ein sehr seltsames ergebnis.

http://www.4webhelp.net/us/timestamp.php sagt:
Tuesday, August 2nd 2005, 14:06:43 (GMT +1)

Habe das auf mehreren rechnern probiert, und die differenz ist immer eine andere!

Kann mir jemand erklären warum das so ist?

lg bernhard

  1. Hi,

    date (systemzeit): 2005-08-02 15:08:43---1122988003
    date (timestamp):  2005-08-02 15:08:43---1122988003
    Tuesday, August 2nd 2005, 14:06:43 (GMT +1)

    bist Du Dir mit den Minuten sicher?

    Kann mir jemand erklären warum das so ist?

    Was die Stunden betrifft: Das liegt daran, dass die Erde eine Kugel ist, die sich um die Sonne und um sich selbst dreht. Dadurch sind immer nur 50% der Oberfläche beschienen, die sich im Laufe eines Zeitraumes, den wir als "Tag" bezeichnen, stetig ändern. Auf zwei verschiedene Orte bezogen beginnt ein solcher Tag somit ggf. zu verschiedenen Zeitpunkten. Damit es sich aber um (etwa) die selben _Uhrzeiten_ handelt, wurde ein Konzept erfunden, welches den Namen "Zeitzone" trägt.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi cheatah,

      date (systemzeit): 2005-08-02 15:08:43---1122988003
      date (timestamp):  2005-08-02 15:08:43---1122988003
      Tuesday, August 2nd 2005, 14:06:43 (GMT +1)

      bist Du Dir mit den Minuten sicher?

      ja, auf einem anderen rechner sinds z.b. 26 minuten.

      Kann mir jemand erklären warum das so ist?

      Was die Stunden betrifft: Das liegt daran, dass die Erde eine Kugel ist, die sich um die Sonne und um sich selbst dreht. Dadurch sind immer nur 50% der Oberfläche beschienen, die sich im Laufe eines Zeitraumes, den wir als "Tag" bezeichnen, stetig ändern. Auf zwei verschiedene Orte bezogen beginnt ein solcher Tag somit ggf. zu verschiedenen Zeitpunkten. Damit es sich aber um (etwa) die selben _Uhrzeiten_ handelt, wurde ein Konzept erfunden, welches den Namen "Zeitzone" trägt.

      schön erklärt :o) ich habe das natürlich bedacht, daher auch (GMT +1)

      für mich ist das alles sehr seltsam. könntest du z.b. mal probieren die zwei zeilen bei dir auszuführen und nachzuschauen auf der website ob das ergebnis ok ist?

      danke & lg
      bernhard

      1. Hi,

        ja, auf einem anderen rechner sinds z.b. 26 minuten.

        erstaunlich. Beim selben Timestamp, oder abhängig von der Systemzeit?

        schön erklärt :o)

        Danke :-)

        für mich ist das alles sehr seltsam. könntest du z.b. mal probieren die zwei zeilen bei dir auszuführen und nachzuschauen auf der website ob das ergebnis ok ist?

        Die beiden Zeilen kann ich nicht ausführen, da mir kein PHP-Server zur Verfügung steht. In JavaScript umgewandelt ergibt sich aber die Minute "6" - und der Monat "8".

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi cheatah

          ja, auf einem anderen rechner sinds z.b. 26 minuten.

          erstaunlich. Beim selben Timestamp, oder abhängig von der Systemzeit?

          Ergebnis auf einem zweiten rechner (debian)

          date(systemzeit): 2005-08-02 15:08:08---1122990248
          date(timestamp):  2005-08-02 15:08:08---1122990248

          resultat von der converter website:
          Tuesday, August 2nd 2005, 14:44:08 (GMT +1)

          Komisch nicht ?!?!

          Habe nun versucht mit obigem Timestamp ein date() zu erzeugen:

          date(systemzeit): 2005-08-02 15:08:05---1122990564
          date(timestamp):  2005-08-02 15:08:08---1122990248

          man beachte das date() der ersten systemzeit - welches 3 sekunden vor dem date() liegt wo ich den timestamp vom letzten aufruf umwandle (in echtzeit liegen da ca. 1-2 minuten dazwischen!)

          Die beiden Zeilen kann ich nicht ausführen, da mir kein PHP-Server zur Verfügung steht. In JavaScript umgewandelt ergibt sich aber die Minute "6" - und der Monat "8".

          Schade, könntest du deinen Javascript code posten?

          lg bernhard

          1. hi,

            date(systemzeit): 2005-08-02 15:08:05---1122990564
            date(timestamp):  2005-08-02 15:08:08---1122990248

            mit diesen beiden timestamps erhalt ich auf http://funpic.de/-gratiswebspace folgendes ergebnis für date('r'):

            1122990564 = Tue, 02 Aug 2005 15:49:24 +0200
            1122990248 = Tue, 02 Aug 2005 15:44:08 +0200

            und bei http://www.4webhelp.net/us/timestamp.php erhalte ich bei GMT+1

            1122990564 translates to Tuesday, August 2nd 2005, 14:49:24 (GMT +1)
            1122990248 translates to Tuesday, August 2nd 2005, 14:44:08 (GMT +1)

            nun, dass sie unsere sommerzeit nicht berücksichtigen, und daher um genau eine stunde daneben liegen, wollen wir ihnen nachsehen.

            wo du deine zusätzliche abweichung um ein paar oder mehr minuten hernimmst, ist mir allerdings auch schleiereule.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Hi wahsaga,

              date(systemzeit): 2005-08-02 15:08:05---1122990564
              date(timestamp):  2005-08-02 15:08:08---1122990248

              mit diesen beiden timestamps erhalt ich auf http://funpic.de/-gratiswebspace folgendes ergebnis für date('r'):

              1122990564 = Tue, 02 Aug 2005 15:49:24 +0200
              1122990248 = Tue, 02 Aug 2005 15:44:08 +0200

              Jetzt laust mich aber der affe!! Mit date('r') erhalte ich plötzlich auch die richtige zeit!

              date(systemzeit): 2005-08-02 16:08:52---1122992632
              date(timestamp):  2005-08-02 16:08:52---1122992632
              date('r'): Tue,  2 Aug 2005 16:23:52 +0200

              absolutely strange!

              und bei http://www.4webhelp.net/us/timestamp.php erhalte ich bei GMT+1

              1122990564 translates to Tuesday, August 2nd 2005, 14:49:24 (GMT +1)
              1122990248 translates to Tuesday, August 2nd 2005, 14:44:08 (GMT +1)

              nun, dass sie unsere sommerzeit nicht berücksichtigen, und daher um genau eine stunde daneben liegen, wollen wir ihnen nachsehen.

              Ach mist, die Sommerzeit, das hab ich natürlich übersehen.

              danke & lg
              bernhard

              1. hi,

                Jetzt laust mich aber der affe!! Mit date('r') erhalte ich plötzlich auch die richtige zeit! [...]
                absolutely strange!

                nö ... wenn wir jetzt, wo wir uns ziemlich sicher sein können, dass der fehler in deinem code liegen müsste, diesen nochmal _genau_ ansehen, was fällt uns da auf?

                da hast "Y-m-d H:m:s" als formatstring verwendet - also

                jahr-monat-tag stunde-MONAT-sekunden

                *g*

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
              2. Peinlich, peinlich, peinlich!

                es war das buchstäbliche i-tüpfelchen:

                date("Y-m-d H:i:s") solls natürlich heissen, und nicht date("Y-m-d H:m:s").

                Problem gelöst :o)
                Ich Depp!

                danke & lg
                bernhard