Linuchs: Zeitzone anzeigen

Moin,

für eine ganz einfache Frage finde ich keine Antwort:

„Wie ermittle ich die Zeitzone meines Servers?“

Ich möchte sowas lesen wie MEZ oder MESZ bzw. die internationale Bezeichnung zur angezeigten / gedruckten Uhrzeit.

Gefunden habe ich

$date = new DateTime(); $timeZone = $date->getTimezone(); echo $timeZone->getName(); 

Antwort: Europe/Berlin

Würde ein User in Spanien das verstehen? Und handelt es sich um die Sommerzeit?

Gruß, Linuchs

  1. Moin,

    für eine ganz einfache Frage finde ich keine Antwort:

    „Wie ermittle ich die Zeitzone meines Servers?“

    Ich möchte sowas lesen wie MEZ oder MESZ bzw. die internationale Bezeichnung zur angezeigten / gedruckten Uhrzeit.

    Gefunden habe ich

    $date = new DateTime(); $timeZone = $date->getTimezone(); echo $timeZone->getName(); 
    

    Antwort: Europe/Berlin

    Würde ein User in Spanien das verstehen? Und handelt es sich um die Sommerzeit?

    https://www.php.net/manual/de/function.date-default-timezone-get.php

    und dann im Kommentar: https://www.php.net/manual/de/function.date-default-timezone-get.php#125626

    So long!

    Duncan Idaho

    1. Hallo,

      „Wie ermittle ich die Zeitzone meines Servers?“

      die Frage ist zu allgemein gestellt. Es fehlt die Angabe: Welche Methode will Linuchs nutzen? Ich dachte erst an eine Shell-Lösung, habe erst dann die gewählte Kategorie PHP gesehen. Also gut.

      https://www.php.net/manual/de/function.date-default-timezone-get.php

      Da steht aber auch, dass diese Funktion kein wirklich verwertbares Ergebnis liefert, wenn die Zeitzone nicht von PHP aus (per Script oder per Konfiguration) gesetzt wurde.

      und dann im Kommentar: https://www.php.net/manual/de/function.date-default-timezone-get.php#125626

      Das sieht besser aus! 😀

      Immer eine Handbreit Wasser unterm Kiel
       Martin

      --
      Wenn ich den See seh, brauch ich kein Meer mehr.
      1. Es fehlt die Angabe: Welche Methode will Linuchs nutzen?

        Ohne großes Trara gibt mir PHP die Jetzt-Zeit:

        Da habe ich nichts dazugezaubert, nur abgefragt, den Wochentag in drei Sprachen:

        date( "d.m.Y H:i" )
        substr( holeWochentag( date( "w" ), $bia_lg, $p000_lg ),0,2)   // Sonntag, Montag, ...
        

        Nun bitte die zugehörige Zeitzone als internationaler Code oder meinetwegen auch in de, en, nl

  2. Hello K.H.,

    unter Date Format findest Du noch die ganzen Formatierungsbeispiele.

    Ich habe gerade erst damit gebastelt -> Sonnenauf-/Untergang

    Für MESZ und MEZ Detektion ist date('I', time()); hilfreich.

    Die Funktion nutzt dann die eingestellte Zeitzone und den UTC-Timestamp, um Sommerzeit und Winterzeit zu detektieren.

    Mein Bastelbeispiel ist da noch lange nicht fertig. Es muss noch aus den Geo-Daten ermittelt werden, ob zu der Zeitzone überhaupt eine Sommer-/Winterzeit gehört.

    Und in Afrika würde die Bezeichnung ja auch nicht MEZ oder MESZ lauten ;-)

    Wenn Du es richtig[tm] machen willst, wird es vermutlich komplizierter.

    Glück Auf
    Tom vom Berg

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. Hallo TS,

      hiermit kann man aus dem UTC Offset ein Zeitzonenkürzel herleiten:

      https://en.wikipedia.org/wiki/List_of_time_zone_abbreviations

      Das ist aber nichts, was PHP aus der Tasche zieht.

      Problem ist halt: Wo ist der User? Im Winter kann UTC+01 vieles sein: MEZ (deutsch), CET (englisch), HNEC (heure normale d'Europe centrale), SEV (Srednjoeuropsko vrijeme - kroatisch) oder vielleicht WAZ (West Africa Time)?

      D.h. für ein korrektes Kürzel muss man den Sprachkontext des Users kennen, und den hat Linuchs eigentlich. DE, EN und NL, zumindest auf remso.eu.

      Frage ist dann auch, welche Zeitzonen man berücksichtigen muss. Für remso.eu wird es vermutlich bei MEZ vs MESZ bleiben (oder CET vs CEST, bzw. MET/MEZT in NL). Sollte remso man Veranstaltungen außerhalb der MEZ Zone anbieten, dürften maximal noch WEZ in Frage kommen (Portugal, Britische Inseln). Kaliningrader und Moskauer Zeit (UTC+2 und +3) dürften schon zu weit weg sein. Aber das könnte man ja auch noch vorsehen, wenn's in den Fingern juckt.

      Eine weltweite Lösung dürfte unnötiger Aufwand sein; und man kann als Fallback immer noch die UTC-Angabe ausgeben.

      Bei der Unterscheidung Winter/Sommerzeit muss man übrigens beachten, dass aktuelle Locale-Tabellen auch die länderspezifischen Sommerzeitregeln kennen. In Europa haben wir es da ganz gut, weil die EU die Sommerzeitregeln vereinheitlicht hat, aber das ist weltweit nicht so. Eine Abfrage mit date_format("I") geht auf die lokale Sommerzeittabelle und ist deshalb nicht geeignet, bspw. für UTC+8 abzufragen, ob dort Sommerzeit ist. Mit "Asia/Shanghai" geht das besser (warum auch immer sie nicht Asia/Beijing verwenden...).

      Rolf

      --
      sumpsi - posui - obstruxi
      1. Hallo Rolf,

        D.h. für ein korrektes Kürzel muss man den Sprachkontext des Users kennen, und den hat Linuchs eigentlich. DE, EN und NL, zumindest auf remso.eu.

        Frage ist dann auch, welche Zeitzonen man berücksichtigen muss. Für remso.eu wird es vermutlich bei MEZ vs MESZ bleiben (oder CET vs CEST, bzw. MET/MEZT in NL). Sollte remso man Veranstaltungen außerhalb der MEZ Zone anbieten, dürften maximal noch WEZ in Frage kommen (Portugal, Britische Inseln). Kaliningrader und Moskauer Zeit (UTC+2 und +3) dürften schon zu weit weg sein. Aber das könnte man ja auch noch vorsehen, wenn's in den Fingern juckt.

        aber wenn man schon lokalisierte Bezeichnungen der Zeitzonen möchte, könnte ich mir auch noch polnische oder französische Bezeichnungen vorstellen (ohne sie jeweils zu kennen).

        Mit "Asia/Shanghai" geht das besser (warum auch immer sie nicht Asia/Beijing verwenden...).

        Vermutlich wegen der größeren wirtschaftlichen Bedeutung von Shanghai.

        Immer eine Handbreit Wasser unterm Kiel
         Martin

        --
        Wenn ich den See seh, brauch ich kein Meer mehr.
      2. @@Rolf B

        D.h. für ein korrektes Kürzel muss man den Sprachkontext des Users kennen

        Die Sprache sagt nicht wirklich was aus. In Südafrika wird u.a. englisch gesprochen, aber mit CEST für ihre Zeitzone +02:00 werden die vermutlich wenig anfangen können.

        😷 LLAP

        --
        „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
        — Joachim Gauck über Impfgegner
    2. Hi,

      Ich habe gerade erst damit gebastelt -> Sonnenauf-/Untergang

      Also die Tageslänge/Sonnenaufgangs-/untergangszeiten für den Nordpol halte ich für falsch.

      Da dürfte momentan die Sonne gar nicht über dem Horizont zu sehen sein.

      cu,
      Andreas a/k/a MudGuard

      1. Hallo,

        Ich habe gerade erst damit gebastelt -> Sonnenauf-/Untergang

        Also die Tageslänge/Sonnenaufgangs-/untergangszeiten für den Nordpol halte ich für falsch.

        das habe ich mir eben gar nicht angesehen.

        Da dürfte momentan die Sonne gar nicht über dem Horizont zu sehen sein.

        Genau. Da ist jetzt monatelang Polarnacht. Gerade für die beiden Pole ist es besonders einfach, weil dort nicht die Rotation der Erde um sich selbst für Sonnenauf- und Untergang relevant ist (die geographische Länge ist singulär). Stattdessen ist an den Polen 6 Monate Tag und 6 Monate Nacht.

        Langfristige Effekte wie Präzession und Nutation mal außen vor.

        Immer eine Handbreit Wasser unterm Kiel
         Martin

        --
        Wenn ich den See seh, brauch ich kein Meer mehr.
      2. Hello,

        0.00 und 000.00 sind ja auch noch keine gültigen Werte für Latitude und Longitude vom Nordpol.

        Die gesamte Bastelei dient eigentlich nur der Übung mit den Datumsfunktionen. Aber wie wir hier schon festgestellt haben,ist das ganze Thema durchaus komplexer.

        Späteres Ziel ist, eine Datensammlung zur PV-Planung daraus erstellen zh können.

        Ich habe gerade erst damit gebastelt -> Sonnenauf-/Untergang

        Also die Tageslänge/Sonnenaufgangs-/untergangszeiten für den Nordpol halte ich für falsch.

        Da dürfte momentan die Sonne gar nicht über dem Horizont zu sehen sein.

        cu,
        Andreas a/k/a MudGuard

        Glück Auf
        Tom vom Berg

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
        1. Moin,

          0.00 und 000.00 sind ja auch noch keine gültigen Werte für Latitude und Longitude vom Nordpol.

          nein, stattdessen sind es die gültigen Koordinaten des Punktes, an dem der Nullmeridian den Äquator schneidet. Und das ist mitten im Atlantik, in der Bucht der westafrikanischen Küste ein gutes Stück vor Nigeria.

          Die gesamte Bastelei dient eigentlich nur der Übung mit den Datumsfunktionen. Aber wie wir hier schon festgestellt haben,ist das ganze Thema durchaus komplexer.

          Wohl wahr. Das ändert aber nichts daran, dass die Feld-Vorbelegungen deines Formulars nicht zueinander passen - also die Zahlenwerte nicht zum Ort Nordpol.

          Immer eine Handbreit Wasser unterm Kiel
           Martin

          --
          Wenn ich den See seh, brauch ich kein Meer mehr.
    3. Da werden auch nicht die Daten für den Nordpol berechnet, sondern 0 Grad Länge auf dem Äquator... Der geographische Nordpol liegt auf dem 90. Grad nördlicher Breite.

      Achte darauf, ob das Datum des Sonnenauf- und -untergangs am selben Tag ist... (Polarnacht, Polartag!) Nur die Stunden anzusehen bringt da nichts.

    4. Ich habe gerade erst damit gebastelt -> Sonnenauf-/Untergang

      ...

      Mein Bastelbeispiel ist da noch lange nicht fertig. Es muss noch aus den Geo-Daten ermittelt werden, ob zu der Zeitzone überhaupt eine Sommer-/Winterzeit gehört.

      Wieso das denn? Man ermittle Sonnenauf-/Untergang in UTC und lasse die Zeiten für die dem Browser bekannte bzw. durch den Benutzer einstellbare(!) IANA-Zeitzone umrechnen.

      Mit dem Teil bin ich quasi fertig: (timedatectl list-timezones liefert die Liste aller definierten Zonen unter Linux)...

      https://home.fastix.org/Tests/sunrise/

      Für den Rest werde ich nicht lange brauchen...

      Eine Datenbank mit 40.000 Orten aus aller Welt und deren Koordinaten hab ich auch schon (die von OSM könnte ich auch benutzen). Wenn Du aber die - teilweise willkürliche - Zeitzonenzuordnung zu einem beliebigen Punkt auf der Erde willst kann es sehr, sehr(!) schwierig werden, denn diese sind teilweise recht problematisch/willkürlich zugeordnet.

      Bliebe noch die „natürliche“ Zeit am Suchort als Alternative. Die kann man aber aus dem Längengrad und GMT errechnen: LängenGrad/15=Tdiff in Stunden)...

  3. Hallo,

    Ich möchte sowas lesen wie MEZ oder MESZ bzw. die internationale Bezeichnung zur angezeigten / gedruckten Uhrzeit.

    mit MEZ oder MESZ wird ein Besucher außerhalb des deutschsprachigen Raums vermutlich wenig anfangen können (die internationalen Bezeichnungen wären CET und CEST).

    Eine weitgehend sprachunabhängige Angabe wäre UTC +0100 oder UTC +0200.

    $date = new DateTime(); $timeZone = $date->getTimezone(); echo $timeZone->getName(); 
    

    Antwort: Europe/Berlin

    Würde ein User in Spanien das verstehen?

    Ich denke schon. Aber ...

    Und handelt es sich um die Sommerzeit?

    ... das geht aus der Angabe nicht hervor.

    Immer eine Handbreit Wasser unterm Kiel
     Martin

    --
    Wenn ich den See seh, brauch ich kein Meer mehr.
  4. Tach!

    „Wie ermittle ich die Zeitzone meines Servers?“

    Was genau hast du vor?

    Wenn du mit PHPs DateTime-Klasse und deren Verwandten arbeitest, kannst du angeben, in welcher Zeitzone die Zeit sein soll, und somit auch zwischen Zeitzonen umrechnen lassen.

    Gefunden habe ich

    $date = new DateTime(); $timeZone = $date->getTimezone(); echo $timeZone->getName(); 
    

    Antwort: Europe/Berlin

    Du bekommst als Antwort das, was als Default eingestellt ist oder was du mit setTimezone() gesetzt hast.

    Würde ein User in Spanien das verstehen?

    Würden die durchschnittlichen Deutschen wissen, ob Europe/Madrid die gleiche oder eine andere Zeit als Europe/Berlin hat? Würden sie wissen, was CET/CEST ist?

    Solche Fragen sollten aber nicht relevant sein. Idealerweise sollte man davon ausgehen, dass die Nutzer keine Ahnung von Zeiten haben, sondern nur, wo sie sich befinden. Da du die Zeitzone beliebig einstellen kannst, könntest du die Nutzer befragen, in welcher Zeitzone oder für welchen Ort (sprich: Hauptstadt) sie die Zeit gern sehen würden. Die Umrechnung übernimmt komfortablerweise PHP.

    Und handelt es sich um die Sommerzeit?

    Das hängt vom Datum ab, und ob die Zeitzone eine Sommerzeit kennt.

    dedlfix.

  5. <?php
    
    $dto = new DateTime;
    echo $dto -> format('e') . PHP_EOL;
    echo $dto -> format('T') . PHP_EOL;
    echo $dto -> format('P') . PHP_EOL;
    if ( $dto -> format('I') ) {
    	echo "Sommerzeit" . PHP_EOL;	
    } else {
    	echo "Mist! Winter." . PHP_EOL;	
    }
    

    Ausgabe:

    Europe/Berlin
    CET
    +01:00
    Mist! Winter.
    

    Link:

    https://www.php.net/manual/de/datetime.format.php

  6. Hallo

    „Wie ermittle ich die Zeitzone meines Servers?“

    Ich möchte sowas lesen wie MEZ oder MESZ bzw. die internationale Bezeichnung zur angezeigten / gedruckten Uhrzeit.

    Dazu, wie das mit PHP zu erreichen ist, haben sich ja schon andere geäußert.

    $date = new DateTime(); $timeZone = $date->getTimezone(); echo $timeZone->getName(); 
    

    Antwort: Europe/Berlin

    Würde ein User in Spanien das verstehen?

    Ja, warum nicht? Vorausgesetzt, dass er oder sie „Europe/Madrid“ versteht, ist „Europe/Berlin“ eine machbare Geistesleistung.

    Und handelt es sich um die Sommerzeit?

    Darüber wird hier keine explizite Aussage getroffen, implizit durch die Verknüpfung mit einem Datum aber doch. Denn „Europe/Berlin“ sagt, dass die Zeitberechnung nach den an diesem Ort gültigen Regeln erfolgt.

    Heute (31.01.2022) ist „Europe/Berlin“ in der Zeitzone MEZ/CET. Am 31.05.2022 ist „Europe/Berlin“ aber in der Zeitzone MESZ/CEST.

    Für die Länder in der EU ist das Zeitzonenhandling nicht so relevant, denn die meisten Länder befinden sich in einer Zeitzone und auch Irland, das die selbe Zeitzone wie UK benutzt und gegenüber dem Kontinent eine Stunde zurückhängt, benutzt die selben, EU-weit einheitlichen Regeln für die Umschaltung zwischen Normal- und Sommerzeit.

    In anderen Regionen unseres Planeten sieht das anders aus. Da kann es vorkommen, dass Nachbarländer prinzipiell den selben Versatz zur UTC/GMT haben, also in einer Zeitzone sein sollten, aber unterschiedliche Regeln für eine etwaige Sommerzeit haben. In Australien beispielsweise gibt es sogar innerhalb des einen Landes Bundesstaaten in denen es eine Sommerzeit gibt und andere, näher am Äquator gelegene, die das nicht haben. Manchmal ändern einzelne Länder ihre Zeitzone oder die Sommerzeitregeln. Kiribati tat das zum Beispiel im Vorfeld des letzten Jahrtausendwechsels, um als erstes Land ins neue Jahrtausend gehen zu können. Es gibt auch Länder, die mit ihren Nachbarn im Clinch liegen und aus (vermutlich strategischen) Gründen ihre Ortszeit gegenüber den Nachbarn um 15 oder 30 Minuten versetzen, obwohl sie geografisch in die selbe Zeitzone passen wie ihre Nachbarn. Da wird dann die Ortsangabe als Zeitzonenangabe sehr viel wichtiger als hier in der EU, wo man in Berlin auch mit (zum Beispiel) „Europe/Amsterdam“ oder „Europe/Madrid“ nicht falsch liegen würde.

    Für dich als Serverbetreiber mag die Angabe von MEZ oder MESZ relevant sein und wie du mit PHP an sie herankommst, weißt du ja jetzt. Für den nicht mit den Zeitzonenkürzeln, geschweige denn mit den Fallstricken dieses Themas an sich vertrauten Benutzers eines Dienstes ist eine Angabe wie „Europe/Berlin“ aber intuitiver – zumindest für die eigene Heimatzeit-(zone).

    Tschö, Auge

    --
    200 ist das neue 35.
    1. Für die Länder in der EU ist das Zeitzonenhandling nicht so relevant, denn die meisten Länder befinden sich in einer Zeitzone und auch Irland, das die selbe Zeitzone wie UK benutzt und gegenüber dem Kontinent eine Stunde zurückhängt, benutzt die selben, EU-weit einheitlichen Regeln für die Umschaltung zwischen Normal- und Sommerzeit.

      Das betrifft nur halbwegs aktuelle Zeitangaben. Historisch (teilweise sogar bis 1981) war das anders.

      Soll heißen: Hast Du ein Datum vor 1981 kann an diesem in Frankreich Sommerzeit gegolten haben, in Deutschland nicht.

      s.a.: https://de.wikipedia.org/wiki/Sommerzeit#Gemeinsame_europ%C3%A4ische_Sommerzeit

      Die Zeitzonendefinitionen berücksichtigen das.

      Ganz wild war es übrigens in Deutschland in den Nachkriegsjahren.

      s. https://code.fastix.org/showFile.php?file=Projekte/PHP%3AFeiertage/deutscheFeiertage.ini ab Zeile 182

      1. @@Raketenwilli

        Soll heißen: Hast Du ein Datum vor 1981 kann an diesem in Frankreich Sommerzeit gegolten haben, in Deutschland nicht.

        Was genau meinst du bei 1981 mit „Deutschland“?

        Ansonsten trifft das Gesagte auch auf die DDR und die BRD zu. Ich kann mich an eine Zeit erinnern, als die Tagesschau im Westfernsehen für uns um 19:00 vor der Aktuellen Kamera lief.

        😷 LLAP

        --
        „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
        — Joachim Gauck über Impfgegner
        1. Hallo

          @@Raketenwilli

          Soll heißen: Hast Du ein Datum vor 1981 kann an diesem in Frankreich Sommerzeit gegolten haben, in Deutschland nicht.

          Was genau meinst du bei 1981 mit „Deutschland“?

          Ansonsten trifft das Gesagte auch auf die DDR und die BRD zu. Ich kann mich an eine Zeit erinnern, als die Tagesschau im Westfernsehen für uns um 19:00 vor der Aktuellen Kamera lief.

          Bist du dir dessen sicher? Ich finde weder in meinen Erinnerungen noch in den Angaben zur Sommerzeit in Deutschland in der Wikipedia [1] jenseits des Jahres 1945 unterschiedliche Regeln für die DDR und die BRD. Solange ich denken kann, kam auch in der DDR [2] die Tagesschau immer um 20 Uhr nach der AK.

          Tschö, Auge

          --
          200 ist das neue 35.

          1. Ja, ich weiß, weder ich noch die Wikipedia haben die (hier historische) Wahrheit gepachtet. Aber soweit ich mich erinnere – und die Angaben in der Wikipedia sind gleichlautend –, waren die Regelungen ab 1980 in beiden deutschen Staaten gleichlautend. ↩︎

          2. Natürlich im Westfernsehen und nur dort, wo dieses empfangbar war. ↩︎

          1. @@Auge

            Ansonsten trifft das Gesagte auch auf die DDR und die BRD zu. Ich kann mich an eine Zeit erinnern, als die Tagesschau im Westfernsehen für uns um 19:00 vor der Aktuellen Kamera lief.

            Bist du dir dessen sicher? Ich finde weder in meinen Erinnerungen noch in den Angaben zur Sommerzeit in Deutschland in der Wikipedia [^1] jenseits des Jahres 1945 unterschiedliche Regeln für die DDR und die BRD.

            Ganz sicher. Im Web hab ich’s auch nirgendwo gefunden, aber in meinen Erinnerungen.

            Entweder war’s 1980 (als die Sommerzeit wieder eingeführt wurde) oder 1981 (als laut Wikipedia der Beginn vorverlegt wurde). Da wurde wohl in DDR und BRD zu unterschiedlichen Daten umgestellt. Der Westen war uns voraus – oder wir dem Westen bei der Zurückstellung, deshalb war’s im Westen um sieben schon um acht.

            Kann sein, dass nur eine Woche dazwischenlag, die Tagesschau also bei uns nur eine Woche lang um 19:00 lief.

            😷 LLAP

            --
            „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
            — Joachim Gauck über Impfgegner