PHP passt sich nicht an Systemzeitzone an?

4 Antworten

In PHP wird die Umstellung auf Sommerzeit automatisch durchgeführt, wenn die Zeitzone entsprechend eingestellt ist. PHP verwendet die Datenbank der Zeitzoneninformationen des Betriebssystems, um zu wissen, wann die Sommerzeit beginnt und endet.

Damit kannst du für PHP die passende Zeitzone einstellen - die Sommerzeiteinstellung müsste PHP standardmäßig aus den Einstellungen des Betriebssystem ziehen:

date_default_timezone_set('Europe/Berlin');

Es müsste also an den Datumseinstellungen deines Betriebssystem liegen ob Sommerzeit genutzt wird oder nicht.

Das ganze kannst du auch bequem mit PHP testen:

if (date('I')) {
    echo "Die Sommerzeit ist aktiv.";
} else {
    echo "Die Sommerzeit ist nicht aktiv.";
}

Wenn das nicht klappt, kannst du im Terminal folgendes nachschauen:

timedatectl status

Damit kannst du deine Einstellungen des Betriebssystem überprüfen.

Es gibt auch eine manuelle Methode, leider finde ich das passende timezone_module_comf.c leider nicht für PHP. Müsste in der Richtung heißen und kann nachinstalliert werden.

Woher ich das weiß:Berufserfahrung – Ich bin gelernter Mediengestalter Digital und Print(IHK)

Lass dir am besten mittels phpinfo ausgeben, welche Konfigurationsdateien aktuell geladen werden (Loaded Configuration File und Additional .ini files parsed). Für den Fall, dass du PHP über die Konsole ausführst, kannst du die richtigen Konfigurationsdateien mittels:

php --ini

ermitteln.

Schau in den angeführten Dateien nach allen date.timezone-Einträgen. Du kannst den Wert selbst definieren:

date.timezone=America/Asuncion

Weitere Vorkommen sollten entfernt oder (mit einem ; am Anfang der Zeile) auskommentiert werden. Wenn keine Zeitzone vorgegeben wird, verwendet PHP UTC.

Nach einer Änderung solltest du deinen Webserver neustarten oder bei Nutzung der PHP-CLI stattdessen die Konsole.

Im System ist eben alles richtig. PHP sagt, die Sommerzeit sei aktiv. In den INI-Dateien ist keine datetime konfiguriert. timedatectl status:

timedatectl status

              Local time: Mi 2024-03-27 17:19:44 -04

          Universal time: Mi 2024-03-27 21:19:44 UTC

                RTC time: Mi 2024-03-27 21:19:44

               Time zone: America/Asuncion (-04, -0400)

System clock synchronized: yes

             NTP service: active

         RTC in local TZ: no

Aber PHP sagt eben:

php > var_dump(new Datetime());

object(DateTime)#1 (3) {

 ["date"]=>

 string(26) "2024-03-27 18:20:06.689363"

 ["timezone_type"]=>

 int(3)

 ["timezone"]=>

 string(15) "America/Halifax"

}

php >

Ist irgendein komischer PHP-Fehler. Ich kann ihn ganz einfach umgehen, indem ich die Zeitzone in der ini-Datei oder im PHP-Skript selber manuell einstelle, aber es wäre halt schön, wenn PHP das selber machen würde.

Das Problem liegt nicht an PHP, sondern am System. Du solltest die Zeitzone direkt im System setzen, dann wird es auch automatisch in PHP übernommen.

Woher ich das weiß:eigene Erfahrung