Start · Sprachen · PHP · Referenz · date_sunset

date_sunset

Funktion

Liefert die Uhrzeit des Sonnenuntergangs für einen gegebenen Tag und geografischen Ort.

seit PHP 5.1.2 Kategorie: date

Signatur

date_sunset(int $timestamp, int $returnFormat = SUNFUNCS_RET_STRING, float|null $latitude = null, float|null $longitude = null, float|null $zenith = null, float|null $utcOffset = null): string|int|float|false

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

Typ
string|int|float|false
Beschreibung
Gibt die Uhrzeit des Sonnenuntergangs im angeforderten Format zurück: als 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 in Berlin: 21:33

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);
}
Sonnenuntergang (Unix): 1734793140 Formatiert: 15:19

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";
Sonnenuntergang: 19:33 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.