Die Funktion von PHPs Datum_Sunset () wird verwendet, um die Sonnenuntergangszeit basierend auf dem angegebenen Datum, Breitengrad und Längengrad sowie anderen Parametern zu berechnen. Bei der Verwendung dieser Funktion werden viele Entwickler jedoch feststellen, dass das Ergebnis, das es zurücksetzt, ungenau ist, selbst ein paar Stunden, abgesehen von den Erwartungen. Dieses Problem scheint ein Fehler in der Funktion selbst zu sein, aber tatsächlich hängt es mit der Standardkonfiguration von PHP, insbesondere der Einstellungen, zusammen.
Die Syntax von DATE_SUNSET () ist wie folgt:
date_sunset(
int $timestamp,
int $format = SUNFUNCS_RET_STRING,
float $latitude = ini_get("date.default_latitude"),
float $longitude = ini_get("date.default_longitude"),
float $zenith = ini_get("date.sunset_zenith"),
float $gmt_offset = 0
): string|int|float|false
Diese Funktion nimmt einen Zeitstempel (normalerweise das Ergebnis von Strtotime () ) und eine Reihe von geografischen Parametern ein und gibt dann die Sonnenuntergangszeit zurück. Der Schlüssel liegt im letzten Parameter: $ GMT_OFFSET , dh der GMT -Offset.
Wenn Sie nicht $ GMT_OFFSET angeben, versucht PHP, den Offset mithilfe der aktuellen Zeitzonenkonfiguration (d. H. Datum.TimeZone ) zu berechnen. Wenn die Zeitzone falsch eingestellt ist oder nicht, weicher die Berechnungsergebnisse vom tatsächlichen Wert ab.
Aus Gründen der Kompatibilität werden viele Server möglicherweise nicht in der Standardzeitzone von PHP festgelegt oder auf UTC gesetzt. Das heisst:
Die Sonnenuntergangszeit wird als UTC -Zeit zurückgegeben, nicht als Ortszeit;
Wenn Sie diesmal direkt als Zeichenfolge ausgeben oder formatieren, steht dies nicht mit der tatsächlichen Sonnenuntergangszeit in Ihrer Region wider.
Zum Beispiel:
echo date_sunset(strtotime('2025-04-26'), SUNFUNCS_RET_STRING, 31.2304, 121.4737); // Shanghai Koordinaten
In der Standard -UTC -Zeitzone kann die Rückgabe "09:54" sein, aber was Sie erwarten, ist die Abendzeit.
Die am meisten empfohlene Methode besteht darin, die erforderliche Zeitzone explizit in das Skript einzustellen. Zum Beispiel:
date_default_timezone_set('Asia/Shanghai');
Dies wirkt sich auf alle Zeitfunktionen aus, einschließlich Datum_Sunset () . In Zusammenarbeit mit den Shanghai -Koordinaten wird die Rückkehrzeit die Zeit des östlichen Distrikts in Ost sein.
Wenn Sie die globalen Zeitzoneneinstellungen nicht ändern möchten, können Sie auch den Zeitzonenversatz manuell angeben, indem Sie den Parameter $ GMT_OFFSET übergeben. Zum Beispiel:
echo date_sunset(strtotime('2025-04-26'), SUNFUNCS_RET_STRING, 31.2304, 121.4737, 90.83, 8);
Der letzte Parameter 8 hier repräsentiert den östlichen achten Bezirk (GMT+8).
Auf der Serverebene können Sie die PHP -Konfigurationsdatei (php.ini) ändern:
date.timezone = "Asia/Shanghai"
Denken Sie daran, den Webserver (z. B. Nginx oder Apache) nach der Änderung neu zu starten.
Bei Anwendungen ist es am sichersten , die Zeitzone immer explizit festzulegen .
Stellen Sie für Framework -Projekte sicher, dass die Standardzeitzone in der Framework -Initialisierung festgelegt ist.
Für Systeme, die an mehreren Orten bereitgestellt werden, sollten Sie $ GMT_OFFSET dynamisch nach dem Benutzerort anpassen.
Das Verhalten der Funktion DATE_SUNSET () hängt von der aktuellen Zeitzonenkonfiguration ab, und wenn Sie nicht das Datum festlegen. Das Verständnis, wie PHP Zeitzonen umgeht und sie bei Bedarf angemessen einstellen, ist der Schlüssel zur Verwendung solcher Zeitfunktionen.
Denken Sie während der Entwicklung und Bereitstellung daran, Ihre PHP -Konfiguration zu überprüfen, um verwirrende Zeitfehler zu vermeiden.