Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Sommerzeit/Normalzeit

Einklappen

Neue Werbung 2019

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

  • PHP Sommerzeit/Normalzeit

    Hallo,

    wie kann ich in PHP die Sommerzeit ermitteln, also das genaue Anfangs- und Enddatum?

    PHP liefert ja mit date("I") ausschließlich eine "1" oder "0" kein Datum.


  • #2
    PHP stellt m.W.n. keine Funktionen zur Verfügung, um die Zeitzonen-Datenbank direkt abzufragen.

    Kommentar


    • #3
      http://php.net/manual/de/datetimezon...ransitions.php

      Kommentar


      • #4
        Man lernt immer wieder dazu ...

        Kommentar


        • #5
          Wenn auf historische Sommerzeiten verzichtet wird kann für die EU durch die Vereinheitlichung der Sommerzeitregelung ab 1996 auch Start und Ende der Sommerzeit mit dieser einfachen Berechnung bestimmt werden:
          PHP-Code:
          $year 2017;

          date_default_timezone_set("Europe/Berlin");

          $startSummertime date_create('last Sunday of March '.$year.' 02:00');
          $endSummertime date_create('last Sunday of October '.$year.' 03:00'); 

          Kommentar


          • #6
            jspit Was mich an deinem Code stört, ist, dass man ja wieder wissen muss welche Regel für die Sommerzeit gilt, man könnte also auch nachsehen und die Daten fest einprogrammieren für die nächsten 10 Jahre, was aber wieder unschön erscheint.

            Gettransistions kannte ich auch noch nicht und habe mal ein Lösung vorbereitet, die hoffentlich hilfreich ist.

            PHP-Code:
            $year     date('y');      // aktuelles Jahr
            $timezone 'Europe/Berlin';
            $offset   0;

            $dt = new DateTimeZone($timezone);
            $ts $dt->getTransitions(mktime(00011$year),
                                      
            mktime(0001231$year));
            if ( isset(
            $ts[1]) ) {
                
            $sommerzeitBeginn date_create($ts[1]['time'])->format('d.m.Y');
                
            $sommerzeitEnde   date_create($ts[2]['time'])->format('d.m.Y');
                
            $offset = (($ts[1]['offset']-$ts[2]['offset'])/3600);
                echo 
            'Sommerzeit in ' $timezone'<br>';
                echo 
            'Jahr:         ' $year'<br>';
                echo 
            'Beginn:       ' $sommerzeitBeginn'<br>';
                echo 
            'Ende:         ' $sommerzeitEnde'<br>';
            }else{
                echo 
            'Keine Sommerzeitumstellung in dieser Zeitzone''<br>';
            }

            if ( 
            $offset>){
                echo 
            'Uhr wird zu Beginn um 'abs($offset) .
                     
            ' Stunde(n) zurück gestellt.';
            }
            if ( 
            $offset<){
                echo 
            'Uhr wird zu Beginn um 'abs($offset) .
                     
            ' Stunde(n) vor gestellt.';

            Kommentar


            • #7
              Warum muss der Nutzer obiger Schnipsel #5 wissen welche Regel gilt?
              Die Regel für die Sommerzeit ist seit 1996 für die EU gesetzlich fixiert, so das die obigen Formeln für die Zeitzone solange gültig sind, bis eben das Gesetz geändert wird.

              Dann ist der obige Code zu modifizieren. So auch für andere Zeitzonen in der EU.

              Bei Nutzung der Methoden von DateTimeZone bin ich für diesen Fall dann auch auf eine Aktualisierung angewiesen.
              Und k.A. für was Alex73 das braucht, ich habs noch nicht benötigt.

              Kommentar


              • #8
                Deswegen:
                Europe/Berlin
                last Sunday of March
                und was ist wenn die Abfrage nicht für Europe sein soll?
                Die Regel für die Sommerzeit ist seit 1996 für die EU gesetzlich fixiert
                Ja für Europa aber eben nicht für den Rest der Welt.
                Ich bin auch gar nicht gegen dein Codeschnipsel. Von mir aus können auch die Wochentage händisch auf deutsch in ein Array geschrieben werden, aber mir gefällt halt, wenn dafür von PHP eine Funktion zur Verfügung gestellt wird, die man dann auch universell einsetzen kann.

                Kommentar


                • #9
                  Im Grunde hast du ja Recht, protestix , warum mit Einschränkungen leben wenn es auch anders geht.
                  Ich habe für die Ermittlung der Zeitpunkte der Uhrumstellung (Winter->Sommer und Winter->Sommer) Funktionen/Methoden erstellt. Den Code hier reinzustellen macht nicht viel Sinn, bei Interesse ist der hier unter GitHub zu sehen. Die Realisierung nutzt auch getTransitions(), ist aber anders gelöst als #6. Ein Grund ist es gibt in der Historie "Sommerzeiten", die nicht im selben Jahr enden sondern sich über mehrere Jahre erstrecken.

                  LG jspit

                  Kommentar

                  Lädt...
                  X