Rechnet der Datepicker falsch?

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Samson1964
    Contao-Urgestein
    • 05.11.2012
    • 2888

    #1

    Rechnet der Datepicker falsch?

    Ich habe ein Problem mit dem Datepicker im DCA. Folgende Datumsangaben verwandte ich in meinem Test, zuerst das eingebene Datum, danach der gespeicherte Timestamp und in Klammern das aufgrund des Timestamps ermittelte Datum:
    Code:
    05.10.1947 = -701920800 (unixtime.de: 05.10.1947 - 00:00:00)
    06.10.1947 = -701830800 (unixtime.de: 06.10.1947 - 00:00:00)
    07.10.1947 = -701744400 (unixtime.de: 07.10.1947 - 00:00:00)
    Wenn man jetzt die Differenzen ermittelt, kommt man zwischen 5. und 6.10.47 auf 90.000 Sekunden, also 1 Stunde mehr! Und genau das wird zum Problem. Beim Übermitteln der Timestamps an einen anderen Server (vom DOSB) über eine API, errechnete der Server für den ersten Timestamp den 04.10.1947 23:00:00. Das finde ich soweit richtig, weil es ja 90.000 Sekunden sind.

    Die IT des DOSB-Servers konnte keine Unregelmäßigkeiten feststellen und schlugen mir vor, einen Timestamp weit entfernt von 00:00 Uhr zu übermitteln, um diesen Problemen aus dem Weg zu gehen.

    Wer rechnet denn nun hier falsch? Warum sind da 90.000 statt 86.400 Sekunden Differenz? Was macht der DOSB-Server richtig und was Contao/unixtime.de falsch - oder umgekehrt?
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung
  • Andreas
    Contao-Urgestein
    • 19.06.2009
    • 7709

    #2
    Ich habe mal ein wenig getestet.

    PHP ermittelt mit strtotime() tatsächlich aus
    Code:
    05.10.1947 => -701920800
    06.10.1947 => -701830800
    was einer Differenz von 90000 entspricht (richtig wären 86400). Selbst mit angegebener Uhrzeit 00:00:00 bekommt man diese Werte.
    Code:
    05.10.1947 00:00:00 => -701920800
    06.10.1947 00:00:00 => -701830800
    Aber beim Zurückwandeln mit date() gibt es wieder das richtige Datum.
    Code:
    -701920800 => 05.10.1947 00:00:00
    -701830800 => 06.10.1947 00:00:00
    PHPs DateTime::createFromFormat($format, $date)->getTimestamp() ermittelt übrigens die gleichen Werte. Bis auf den Unterschied, dass man bei createFromFormat() die Uhrzeit 00:00:00 mit angeben muss, sonst nimmt es die aktuelle Uhrzeit.

    Ob das an der Umstellung von der Sommerzeit liegt?

    Calc aus OOo z.B. ermittelt aus diesen Timestamps folgende Datums (=ZELLE/86400+25569)
    Code:
    -701920800 => 05.10.1947 22:00:00
    -701830800 => 06.10.1947 23:00:00
    Hier mein Script, mit dem ich getestet habe:
    PHP-Code:
    <?php
    
    $date = '.10.1947 00:00:00';
    $formatIn  = 'd.m.Y H:i:s'; // anpassen an $date
    $formatOut = 'd.m.Y H:i:s';
    
    foreach(array('05', '06', '07') as $day)
    {
      echo $day.$date.'<br><br>';
    
      echo 'timestamp with strtotime()<br>';
      dump(strtotime($day.$date));
      echo 'readable with date()';
      dump(date($formatOut, strtotime($day.$date)));
      echo 'readable with \Date::parse()';
      dump(\Date::parse($formatOut, strtotime($day.$date)));
    
      echo 'timestamp with DateTime';
      dump(DateTime::createFromFormat($formatIn, $day.$date)->getTimestamp());
      echo 'readable with date()';
      dump(date($formatOut, DateTime::createFromFormat($formatIn, $day.$date)->getTimestamp()));
      echo '<hr>';
    }
    
    ?>
    edit: \Date:arse() hinzugefügt
    Zuletzt geändert von Andreas; 14.11.2016, 13:37.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

    Kommentar

    • Andreas
      Contao-Urgestein
      • 19.06.2009
      • 7709

      #3
      Scheint ganz einfach wirklich mit der "Daylight Saving Time" zu tun zu haben. Das heißt es gibt Tage mit 86400, 90000 und 82800 Sekunden. Habe nach "php timestamp 90000" gesucht.
      Bitte!
      Vor Anfragen im Forum HTML validieren.
      Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

      Vielen Dank an alle Wunschlistenerfüller
      Andreas Burg, Web Solutions

      Kommentar

      • Hanski
        Contao-Nutzer
        • 23.02.2010
        • 59

        #4
        siehe auch
        Die Physikalisch-Technische Bundesanstalt (PTB), Braunschweig und Berlin, ist das nationale Metrologie-Institut mit wissenschaftlich-technischen Dienstleistungsaufgaben. Sie misst mit höchster Genauigkeit und Zuverlässigkeit – Metrologie als Kernkompetenz.

        Kommentar

        • Andreas
          Contao-Urgestein
          • 19.06.2009
          • 7709

          #5
          Und hier ne Auflistung mit PHP
          PHP-Code:
          <?php
          
          $years = range(1900, 2020);
          
          echo '<pre>';
          foreach($years as $year)
          {
            echo $year."\n";
          
            for($month = 1; $month <= 12; $month++) {
          
              for($day = 1; $day <= 31; $day++) {
                if(checkdate($month, $day, $year))
                {
                  $i++;
                  $timestamp = strtotime($day.'.'.$month.'.'.$year);
                  $arrTimestamp[$i] = $timestamp;
                  if($i > 1 && $arrTimestamp[$i] - $arrTimestamp[$i-1] != 86400)
                  {
                    echo date('D d. M Y', $timestamp).' - '.($arrTimestamp[$i] - $arrTimestamp[$i-1])."\n";
                  }
                }
              }
            }
          }
          echo '</pre>';
          
          ?>
          Klicke auf die Grafik für eine vergrößerte Ansicht

Name: daylight-saving-time.png
Ansichten: 1
Größe: 51,8 KB
ID: 928609
          Zuletzt geändert von Andreas; 10.11.2016, 23:44.
          Bitte!
          Vor Anfragen im Forum HTML validieren.
          Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

          Vielen Dank an alle Wunschlistenerfüller
          Andreas Burg, Web Solutions

          Kommentar

          • folkfreund
            Contao-Urgestein
            • 09.04.2010
            • 1928

            #6
            Wird dieses 'Zeitchaos' von PHP abgebildet?

            Na ja, damals hat noch niemand vorhersehen können, dass wir heute mit Computern Zeitdifferenzen in diesen Jahren berechnen.
            1970 wusste ja auch noch niemand, dass irgendwann mal 2038 sein würde .

            Kommentar

            • Andreas
              Contao-Urgestein
              • 19.06.2009
              • 7709

              #7
              Zitat von folkfreund Beitrag anzeigen
              Wird dieses 'Zeitchaos' von PHP abgebildet?
              Ich habe oben noch die Ausgabe als Bild hinzugefügt.
              Bitte!
              Vor Anfragen im Forum HTML validieren.
              Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

              Vielen Dank an alle Wunschlistenerfüller
              Andreas Burg, Web Solutions

              Kommentar

              • Samson1964
                Contao-Urgestein
                • 05.11.2012
                • 2888

                #8
                Wow, danke für die Erläuterungen. Nicht GMT+1 ist die Ursache, sondern die Sommerzeit. Das heißt für mich, das der DOSB-Server die Sommerzeit berücksichtigt und mein Server nicht. Muss ich wohl tatsächlich ein paar Stunden addieren, bevor ich den timestamp zum DOSB-Server abschicke.

                Gesendet von meinem L52 mit Tapatalk
                Viele Grüße
                Frank

                Seit Mai 2013 Fan von Contao
                Webmaster vom Deutschen Schachbund und Berliner Schachverband
                Mein Blog: Schachbulle
                Meine Erweiterungen bei GitHub
                Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

                Kommentar

                • Spooky
                  Community-Moderator
                  Wandelndes Contao-Lexikon
                  • 12.04.2012
                  • 38811

                  #9
                  Timestamps sind absolute Werte. Erkläre mal dein Vorhaben.
                  » sponsor me via GitHub or Revolut

                  Kommentar

                  • Samson1964
                    Contao-Urgestein
                    • 05.11.2012
                    • 2888

                    #10
                    Siehe mein erster Beitrag. Wenn ich den timestamp -701920800 also 05.10.1947 00:00:00 an den DOSB-Server übertragen, ermittelt der DOSB-Server daraus den 04.10.1947 23:00:00. Die DOSB-IT sagt, bei uns ist alles korrekt. Vorschlag der DOSB-IT war einfach bei meinem timestamp 1 oder mehr Stunden zu addieren. Meine Vermutung: der DOSB-Server steht in einem Land das keine Zeitumstellung kennt und deshalb den timestamp anders umrechnen.

                    Gesendet von meinem L52 mit Tapatalk
                    Viele Grüße
                    Frank

                    Seit Mai 2013 Fan von Contao
                    Webmaster vom Deutschen Schachbund und Berliner Schachverband
                    Mein Blog: Schachbulle
                    Meine Erweiterungen bei GitHub
                    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

                    Kommentar

                    • fiedsch
                      Contao-Urgestein
                      • 09.07.2009
                      • 3074

                      #11
                      Zitat von Samson1964 Beitrag anzeigen
                      Meine Vermutung: der DOSB-Server steht in einem Land das keine Zeitumstellung kennt und deshalb den timestamp anders umrechnen.
                      Aber ist es nicht so, daß Timestamps alle "in GMT" sein sollten und es somit egal ist wo af der Welt Du bist.
                      Contao-Community-Treff Bayern: http://www.contao-bayern.de

                      Kommentar

                      • Spooky
                        Community-Moderator
                        Wandelndes Contao-Lexikon
                        • 12.04.2012
                        • 38811

                        #12
                        Zitat von Samson1964 Beitrag anzeigen
                        Siehe mein erster Beitrag. Wenn ich den timestamp -701920800 also 05.10.1947 00:00:00 an den DOSB-Server übertragen, ermittelt der DOSB-Server daraus den 04.10.1947 23:00:00.
                        Wahrscheinlich weil sich der Server in eben dieser Zeitzone befindet. Das ist normal. -701920800 entspricht Oct 04 1947 23:00:00 in GMT DST.


                        Zitat von Samson1964 Beitrag anzeigen
                        Meine Vermutung: der DOSB-Server steht in einem Land das keine Zeitumstellung kennt und deshalb den timestamp anders umrechnen.
                        So funktionieren Timestamps nicht . Timestamps sind immer gleich.
                        Zuletzt geändert von Spooky; 14.11.2016, 13:55.
                        » sponsor me via GitHub or Revolut

                        Kommentar

                        • Andreas
                          Contao-Urgestein
                          • 19.06.2009
                          • 7709

                          #13
                          Zitat von Andreas Beitrag anzeigen
                          Calc aus OOo z.B. ermittelt aus diesen Timestamps folgende Datums (=ZELLE/86400+25569)
                          Code:
                          -701920800 => 05.10.1947 22:00:00
                          -701830800 => 06.10.1947 23:00:00
                          Calc scheint das ja auch nicht richtig umwandeln zu können.
                          Bitte!
                          Vor Anfragen im Forum HTML validieren.
                          Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

                          Vielen Dank an alle Wunschlistenerfüller
                          Andreas Burg, Web Solutions

                          Kommentar

                          Lädt...