Signatur
Beschreibung
date_sunrise() berechnet den Zeitpunkt des Sonnenaufgangs für ein gegebenes Datum (als Unix-Timestamp) und einen geografischen Ort, der durch Breitengrad (latitude) und Längengrad (longitude) beschrieben wird. Das Ergebnis kann in verschiedenen Formaten zurückgegeben werden: als formatierter Zeitstring, als Unix-Timestamp oder als Dezimalstunden.
Wird kein Breitengrad, Längengrad, Zenit oder UTC-Offset angegeben, greift PHP auf die entsprechenden INI-Einstellungen (date.default_latitude, date.default_longitude, date.sunrise_zenith und die Standard-Zeitzone) zurück. Das erlaubt eine einfache Standardkonfiguration für Anwendungen, die stets denselben Standort verwenden.
Typische Einsatzgebiete sind Wetter-Apps, landwirtschaftliche Kalender, astronomische Berechnungen oder das automatische Schalten von Beleuchtung und anderen zeitgesteuerten Systemen in Abhängigkeit von der Tageszeit.
Achtung: Diese Funktion ist seit PHP 8.1.0 als deprecated (veraltet) markiert und sollte nicht mehr in neuem Code verwendet werden. Als Ersatz empfiehlt sich die Klasse DateTime in Verbindung mit date_sun_info().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $timestamp Pflicht | int | Unix-Timestamp des Tages, für den der Sonnenaufgang berechnet werden soll. Die Uhrzeit des Timestamps wird ignoriert; nur das Datum ist relevant. | |
| $returnFormat | int | SUNFUNCS_RET_STRING | Gibt an, in welchem Format die Uhrzeit zurückgegeben wird. Mögliche Werte: SUNFUNCS_RET_STRING (z. B. '06:42'), SUNFUNCS_RET_DOUBLE (Dezimalstunden, z. B. 6.7), SUNFUNCS_RET_TIMESTAMP (Unix-Timestamp als int). |
| $latitude | float|null | null | Geografischer Breitengrad des Ortes in Dezimalgrad. Positive Werte stehen für nördliche, negative für südliche Breite. Standardwert aus date.default_latitude. |
| $longitude | float|null | null | Geografischer Längengrad des Ortes in Dezimalgrad. Positive Werte stehen für östliche, negative für westliche Länge. Standardwert aus date.default_longitude. |
| $zenith | float|null | null | Zenit-Winkel der Sonne in Grad. Der übliche Standardwert ist 90.833 (berücksichtigt Refraktion und Sonnendurchmesser). Standardwert aus date.sunrise_zenith. |
| $utcOffset | float|null | null | Verschiebung gegenüber UTC in Stunden. Wird nur verwendet, wenn returnFormat nicht SUNFUNCS_RET_TIMESTAMP ist. Standardwert wird aus der konfigurierten Zeitzone ermittelt. |
Rückgabewert
returnFormat: ein Zeitstring (SUNFUNCS_RET_STRING), ein Unix-Timestamp (SUNFUNCS_RET_TIMESTAMP) oder Dezimalstunden (SUNFUNCS_RET_DOUBLE). Gibt false zurück, wenn der Sonnenaufgang für den angegebenen Ort und Zeitraum nicht bestimmt werden kann (z. B. Polarnacht).Beispiele
Sonnenaufgang für Berlin (heutiges Datum) als String
<?php
// Berlin: Breitengrad 52.52, Längengrad 13.41, UTC+1 (Winterzeit)
$timestamp = mktime(0, 0, 0, 6, 21, 2024); // Sommersonnenwende 2024
$aufgang = date_sunrise(
$timestamp,
SUNFUNCS_RET_STRING,
52.52,
13.41,
90.833,
2 // MESZ = UTC+2
);
echo "Sonnenaufgang in Berlin am 21.06.2024: " . $aufgang;
Sonnenaufgang als Unix-Timestamp und formatierte Ausgabe
<?php
// Sonnenaufgang für Wien (48.21°N, 16.37°E) als Unix-Timestamp
$tag = mktime(0, 0, 0, 12, 21, 2024); // Wintersonnenwende 2024
$ts = date_sunrise(
$tag,
SUNFUNCS_RET_TIMESTAMP,
48.21,
16.37,
90.833,
1 // MEZ = UTC+1
);
if ($ts !== false) {
echo "Sonnenaufgang (Timestamp): " . $ts . PHP_EOL;
echo "Formatiert: " . gmdate('H:i:s', $ts) . " Uhr (UTC+1)";
} else {
echo "Kein Sonnenaufgang berechenbar.";
}
Moderne Alternative mit date_sun_info()
<?php
// Empfohlene Alternative seit PHP 8.1 (date_sunrise ist deprecated)
$tag = mktime(0, 0, 0, 6, 21, 2024);
$info = date_sun_info($tag, 52.52, 13.41);
$timezone = new DateTimeZone('Europe/Berlin');
$aufgang = new DateTime('@' . $info['sunrise']);
$aufgang->setTimezone($timezone);
echo "Sonnenaufgang: " . $aufgang->format('H:i:s') . " Uhr (Berlin)";
// Wichtig · Fallstricke
Deprecated seit PHP 8.1.0: date_sunrise() sollte in neuem Code nicht mehr verwendet werden. Die empfohlene Alternative ist date_sun_info() in Kombination mit der DateTime-Klasse und DateTimeZone, da diese eine präzisere Handhabung von Zeitzonen ermöglichen.
Für Orte nördlich des Polarkreises oder südlich des antarktischen Kreises kann die Funktion false zurückgeben (Polarnacht oder Mitternachtssonne). Der Rückgabewert sollte daher stets mit === false geprüft werden.
Der Parameter utcOffset hat keinen Einfluss, wenn returnFormat auf SUNFUNCS_RET_TIMESTAMP gesetzt ist, da ein Unix-Timestamp immer UTC-basiert ist.