PHP passt sich nicht an Systemzeitzone an?
Guten Tag, ich habe ein Problem: Die Zeitzone meines Computers ist America/Asuncion, und vor kurzem hatten wir noch Sommerzeit, jetzt aber nicht mehr. Mein Betriebssystem ist Linux Mint 21.3 und die Zeit hatte sich automatisch wieder auf Nicht-Sommerzeit umgestellt. Alles gut soweit. Nun aber ist PHP, welches ich über APT installiert habe, hartnäckig bei der alten Zeit, also der Sommerzeit, geblieben. Und als Zeitzone zeigt es nun "America/Halifax" statt Asuncion an. Mit date_default_timezone_set("America/Asuncion") kann ich zwar alles richtig einstellen, aber ich würde schon gerne, dass PHP meiner Systemzeit folgt. In der php.ini ist nichts bzgl. Zeitzone eingestellt.
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.
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.