Ergebnis 1 bis 13 von 13

Thema: Rechnet der Datepicker falsch?

  1. #1
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard 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

  2. #2
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    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($formatOutstrtotime($day.$date)));
      echo 
    'readable with \Date::parse()';
      
    dump(\Date::parse($formatOutstrtotime($day.$date)));

      echo 
    'timestamp with DateTime';
      
    dump(DateTime::createFromFormat($formatIn$day.$date)->getTimestamp());
      echo 
    'readable with date()';
      
    dump(date($formatOutDateTime::createFromFormat($formatIn$day.$date)->getTimestamp()));
      echo 
    '<hr>';
    }

    ?>
    edit: \Date::parse() hinzugefügt
    Geändert von Andreas (14.11.2016 um 12:37 Uhr)
    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

  3. #3
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    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

  4. #4

  5. #5
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Und hier ne Auflistung mit PHP
    PHP-Code:
    <?php

    $years 
    range(19002020);

    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 && $arrTimestamp[$i] - $arrTimestamp[$i-1] != 86400)
            {
              echo 
    date('D d. M Y'$timestamp).' - '.($arrTimestamp[$i] - $arrTimestamp[$i-1])."\n";
            }
          }
        }
      }
    }
    echo 
    '</pre>';

    ?>
    daylight-saving-time.png
    Geändert von Andreas (10.11.2016 um 22:44 Uhr)
    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

  6. #6
    Contao-Urgestein Avatar von folkfreund
    Registriert seit
    09.04.2010.
    Beiträge
    1.928

    Standard

    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 .

  7. #7
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat 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

  8. #8
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    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

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.116
    Partner-ID
    10107

    Standard

    Timestamps sind absolute Werte. Erkläre mal dein Vorhaben.

  10. #10
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    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

  11. #11
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.943

    Standard

    Zitat 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

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.116
    Partner-ID
    10107

    Standard

    Zitat 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 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.
    Geändert von Spooky (14.11.2016 um 12:55 Uhr)

  13. #13
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat 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

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •