Signatur
Beschreibung
date_sunset() berechnet die Uhrzeit des Sonnenuntergangs für einen bestimmten Tag (angegeben als Unix-Zeitstempel) und einen geografischen Standort (Breiten- und Längengrad). Das Ergebnis kann in verschiedenen Formaten zurückgegeben werden: als formatierter String, als Stunden-Float oder als Unix-Zeitstempel.
Die Funktion eignet sich beispielsweise für Wetteranwendungen, Kalender-Tools oder automatisierte Beleuchtungssteuerungen, bei denen der Sonnenuntergang standortabhängig berechnet werden soll. Werden keine Koordinaten übergeben, greift PHP auf die in der php.ini gesetzten Werte date.default_latitude und date.default_longitude zurück.
Der Zenith-Winkel bestimmt, ab welcher Sonnenhöhe der Untergang gilt. Übliche Werte sind: zivile Dämmerung (96°), nautische Dämmerung (102°), astronomische Dämmerung (108°) oder der Standard (90°50').
Hinweis: Die Funktion ist seit PHP 8.1.0 als deprecated markiert. Als moderne Alternative empfiehlt sich date_sun_info(), die alle Sonnenereignisse auf einmal berechnet und ein strukturiertes Array zurückgibt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $timestamp Pflicht | int | Unix-Zeitstempel des Tages, für den der Sonnenuntergang berechnet werden soll. | |
| $returnFormat | int | SUNFUNCS_RET_STRING | Legt das Rückgabeformat fest. Mögliche Werte: SUNFUNCS_RET_STRING (z. B. "19:45"), SUNFUNCS_RET_DOUBLE (Stunden als Float, z. B. 19.75) oder SUNFUNCS_RET_TIMESTAMP (Unix-Zeitstempel). |
| $latitude | float|null | null | Geografischer Breitengrad des Standorts in Grad. Positive Werte = nördliche Hemisphäre, negative = südliche. Wird null übergeben, greift der INI-Wert date.default_latitude. |
| $longitude | float|null | null | Geografischer Längengrad des Standorts in Grad. Positive Werte = östliche Hemisphäre, negative = westliche. Wird null übergeben, greift der INI-Wert date.default_longitude. |
| $zenith | float|null | null | Zenitwinkel der Sonne in Grad. Standardwert ist 90.833333 (geometrischer Sonnenuntergang unter Berücksichtigung der atmosphärischen Lichtbrechung). Wird null übergeben, greift der INI-Wert date.sunset_zenith. |
| $utcOffset | float|null | null | Offset zur UTC-Zeit in Stunden. Nur relevant bei den Formaten SUNFUNCS_RET_STRING und SUNFUNCS_RET_DOUBLE. Wird null übergeben, greift die aktuell eingestellte Zeitzone. |
Rückgabewert
string (z. B. "19:45"), als float (Dezimalstunden) oder als int (Unix-Zeitstempel). Bei einem Fehler (z. B. keine Sonne an Polartagen) wird false zurückgegeben.Beispiele
Sonnenuntergang in Berlin als formatierter String
<?php
// Sonnenuntergang für Berlin am 21. Juni 2024
$timestamp = mktime(12, 0, 0, 6, 21, 2024);
$sunset = date_sunset(
$timestamp,
SUNFUNCS_RET_STRING,
52.52, // Breitengrad Berlin
13.405, // Längengrad Berlin
90.833333,
2.0 // UTC+2 (MESZ)
);
echo "Sonnenuntergang in Berlin: " . $sunset;
Sonnenuntergang als Unix-Zeitstempel und Fallback-Prüfung
<?php
// Sonnenuntergang in Oslo am 21. Dezember 2024 (kurzer Wintertag)
$timestamp = mktime(12, 0, 0, 12, 21, 2024);
$sunset = date_sunset(
$timestamp,
SUNFUNCS_RET_TIMESTAMP,
59.91, // Breitengrad Oslo
10.75, // Längengrad Oslo
90.833333,
1.0 // UTC+1 (MEZ)
);
if ($sunset === false) {
echo "Kein Sonnenuntergang berechenbar (Polartag oder -nacht).";
} else {
echo "Sonnenuntergang (Unix): " . $sunset . PHP_EOL;
echo "Formatiert: " . date('H:i', $sunset);
}
Moderne Alternative: date_sun_info()
<?php
// Empfohlene Alternative seit PHP 8.1 (date_sunset ist deprecated)
$timestamp = mktime(12, 0, 0, 6, 21, 2024);
$sunInfo = date_sun_info($timestamp, 52.52, 13.405);
$sunsetTs = $sunInfo['sunset'];
echo "Sonnenuntergang: " . date('H:i', $sunsetTs) . " UTC";
// Wichtig · Fallstricke
Deprecation: date_sunset() ist seit PHP 8.1.0 als veraltet markiert und wird in einer künftigen PHP-Version entfernt. Neuer Code sollte stattdessen date_sun_info() verwenden, das alle relevanten Sonnenereignisse auf einmal liefert.
Bei Standorten oberhalb des Polarkreises kann die Funktion false zurückgeben, wenn es einen Polartag (Sonne geht nicht unter) oder eine Polarnacht (Sonne geht nicht auf) gibt. Diesen Fall immer explizit prüfen, um Fehler in der Anwendungslogik zu vermeiden.
Der Parameter utcOffset wird bei SUNFUNCS_RET_TIMESTAMP ignoriert — der zurückgegebene Zeitstempel ist immer UTC-basiert. Das Formatieren mit date() berücksichtigt dann automatisch die aktuelle Zeitzone.