Ankündigung

Einklappen
Keine Ankündigung bisher.

[ERLEDIGT] date liefert beim gleichen Aufruf zwei Ergebnisse

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [ERLEDIGT] date liefert beim gleichen Aufruf zwei Ergebnisse

    Hallo zusammen,

    ich habe folgendes Problem, bei dem mir bisheriges Suchen keinen Hinweis liefern konnte.

    Innerhalb eines Frameworks (Codeigniter) lasse ich mir in zwei verschiedenen Views mit dem folgenden Code ein Datum ausgeben:
    PHP-Code:
    date('d.m.Y, H:i'$timestamp_picking
    Die Variable $timestamp_picking wird in beiden Fällen von der gleichen Methode gespeist:
    PHP-Code:
    public function get_deadline_timestamp($deadline_type) {
        
    $this->db->select('UNIX_TIMESTAMP(Datum) AS Datum');
        
    $this->db->from('termin');
        
    $this->db->where('TermintypID'$deadline_type);
        return 
    $this->db->get()->row()->Datum;

    In beiden Fällen wird als Parameter der gleiche numerische Wert übergeben. Es gibt bei der Speisung der Variablen $timestamp_picking oder bei den Funktionsaufrufen keinerlei Unterschiede.

    Und trotzdem unterscheidet sich der Datum-Uhrzeit-String in beiden Views um 1 Stunde.

    Testweise habe ich einfach den Variableninhalt statt dem date-String ausgegeben - beide Ausgaben sind identisch.
    Verwende ich den oben geschriebenen date-Aufruf erhalte ich trotz gleichem Parameter zwei unterschiedliche Ergebnisse?!

    Hat von euch schon mal jemand dieses Problem gehabt?


    Zur Info:
    Der Timestamp liegt in einer MySQL-Datenbank im Typ "datetime" vor und sieht z.B. so aus:
    PHP-Code:
    2016-03-16 20:44:00 
    Es gibt Tage da verliert man und es gibt Tage da gewinnen die anderen ...

  • #2
    Und welche Zeitzone zeigen diese Views an ?
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Es war einfach schon viel zu spät gestern ...

      Die Frage nach der Timezone war jedenfalls Gold wert!

      Als ich gerade schreiben wollte, dass die Timezone auf dem Server und im Framework die gleiche ist und auch in den Views nicht verändert wird, habe ich den Verursacher meines Problems gefunden.

      Die Zeile ...
      PHP-Code:
      date_default_timezone_set("Europe/Berlin"); 
      ... sorgte wohl für die Diskrepanz der Uhrzeiten.

      Was mich aber nach wie vor verwirrt ist folgendes:
      • Laut phpinfo() ist die Server-Timezone "Europe/Berlin".
      • Im Framework ist in einem dafür vorgesehenen Model die Timezone "Europe/Berlin" eingerichtet und wird an den benötigten Stellen über eine Methode ausgelesen.
      • Die oben genannte Zeile setzt ebenfalls als Timezone "Europe/Berlin".
      Lasse ich die oben genannte Zeile weg, werden die Uhrzeiten in beiden Views wieder gleich angezeigt, aber um eine Stunde geringer - vermutlich ein Sommer-/Winterzeit-Umstand.

      Ich hätte allerdings erwartet, dass das Setzen der gleichen Timezone keinerlei Auswirkungen hätte, statt die Zimezone eine Stunde weiter zu setzen.
      Habt ihr eine Erklärung dafür?


      EDIT:
      Da zu der Diskrepanz noch der Fehler durch die Sommerzeit dazu kam, habe ich das Handling jetzt dahingehend geändert, dass im Date_Model ab jetzt geprüft wird ob Sommer- oder Winterzeit ist.
      In Abhängigkeit davon wird der Timestamp ggf. um den Unterschied (bei uns 1 Stunde) modifiziert und erst danach zur Ausgabe weitergeleitet.
      Es gibt Tage da verliert man und es gibt Tage da gewinnen die anderen ...

      Kommentar


      • #4
        Zitat von Raiden Beitrag anzeigen
        Da zu der Diskrepanz noch der Fehler durch die Sommerzeit dazu kam, habe ich das Handling jetzt dahingehend geändert, dass im Date_Model ab jetzt geprüft wird ob Sommer- oder Winterzeit ist.
        In Abhängigkeit davon wird der Timestamp ggf. um den Unterschied (bei uns 1 Stunde) modifiziert und erst danach zur Ausgabe weitergeleitet.
        Das ist doch hochgradiger Pfusch. Sorge einfach dafür, dass deine Zeiten immer die richtige Zeitzone haben. Und arbeite mit DateTime und DateTimeZone statt mit date().

        Kommentar


        • #5
          Danke, @hellbringer.

          Letztlich hatte ich zwei Hürden zu nehmen.
          1) die Zeile mit der doppelten Timezone-Deklaration - ich weiß immer noch nicht warum das zu einem Unterschied von 1 Stunde geführt hat ...
          2) Zu erkennen, dass die date()-Funktion mir den Fehler einbaut.

          Zu 2):
          Ich hatte die ganze Zeit DateTime und DateTimeZone benutzt und damit alle Timestamps intern korrekt verarbeiten und vergleichen können.
          Was ich nicht wusste war, dass date() mir hier den Fehler einbaut - danke für den Hinweis!

          Meine Änderungen seit heute Morgen habe ich jetzt zurückgerollt *facepalm* und stattdessen gebe ich in der View nur den Variablen-Wert aus.
          Die Variable baue ich derweil so zusammen:

          PHP-Code:
          $timestamp $this->get_timestamp();
          $date  = new DateTime("@$timestamp");
          $date->setTimezone($this->get_timezone());
          $date $date->format('d.m.Y, H:i'); 
          Das ist jetzt wesentlich sauberer, denke ich.

          Damit hat sich die Zeit-Verschiebung automatisch erledigt, ohne, dass ich das selbst handeln muss.

          Danke für eure Hilfe!
          Es gibt Tage da verliert man und es gibt Tage da gewinnen die anderen ...

          Kommentar

          Lädt...
          X