Start · Sprachen · PHP · Referenz · date_sun_info

date_sun_info

Funktion

Gibt ein Array mit Informationen über Sonnenauf- und -untergang sowie Beginn und Ende der Dämmerung für einen bestimmten Zeitpunkt und Ort zurück.

seit PHP 5.1.2 Kategorie: date

Signatur

date_sun_info(int $timestamp, float $latitude, float $longitude): array

Beschreibung

date_sun_info() berechnet anhand eines Unix-Timestamps sowie der geografischen Koordinaten (Breitengrad und Längengrad) eine Reihe astronomisch relevanter Zeitpunkte rund um die Sonne. Das Ergebnis-Array enthält Unix-Timestamps für Sonnenaufgang, Sonnenuntergang, Sonnenhöchststand sowie die verschiedenen Dämmerungsphasen (bürgerliche, nautische und astronomische Dämmerung).

Die Funktion ist besonders nützlich für Anwendungen, die tageszeitabhängige Logik benötigen – etwa Smart-Home-Steuerungen, Außenbeleuchtungssysteme, Fotografen-Apps (goldene Stunde) oder Wetterportale. Da alle Rückgabewerte als Unix-Timestamps vorliegen, lassen sie sich direkt mit date(), strtotime() oder DateTime-Objekten weiterverarbeiten.

Für Orte, an denen die Sonne an bestimmten Tagen nicht auf- oder untergeht (z. B. Polarnacht, Polartag), gibt die Funktion für die betroffenen Schlüssel false zurück. Liegt die Sonne dauerhaft über oder unter dem Horizont, werden für einzelne Schlüssel true zurückgegeben.

Parameter

Name Typ Default Beschreibung
$timestamp Pflicht int Unix-Timestamp des Datums, für das die Sonneninformationen berechnet werden sollen. Uhrzeit-Anteile werden ignoriert; relevant ist nur das Datum.
$latitude Pflicht float Geografischer Breitengrad des Standorts in Dezimalgrad. Positive Werte stehen für nördliche Breiten, negative für südliche Breiten (z. B. 52.52 für Berlin).
$longitude Pflicht float Geografischer Längengrad des Standorts in Dezimalgrad. Positive Werte stehen für östliche Längen, negative für westliche Längen (z. B. 13.405 für Berlin).

Rückgabewert

Typ
array
Beschreibung

Gibt ein assoziatives Array zurück, das folgende Schlüssel enthält (alle Werte sind Unix-Timestamps oder false/true bei Sonderfällen):

  • sunrise – Zeitpunkt des Sonnenaufgangs
  • sunset – Zeitpunkt des Sonnenuntergangs
  • transit – Zeitpunkt des Sonnenhöchststands (Sonnenmittag)
  • civil_twilight_begin – Beginn der bürgerlichen Morgendämmerung (Sonne 6° unter dem Horizont)
  • civil_twilight_end – Ende der bürgerlichen Abenddämmerung
  • nautical_twilight_begin – Beginn der nautischen Morgendämmerung (Sonne 12° unter dem Horizont)
  • nautical_twilight_end – Ende der nautischen Abenddämmerung
  • astronomical_twilight_begin – Beginn der astronomischen Morgendämmerung (Sonne 18° unter dem Horizont)
  • astronomical_twilight_end – Ende der astronomischen Abenddämmerung

Beispiele

Sonnenauf- und -untergang für Berlin ausgeben

<?php
// Koordinaten Berlin
$latitude  = 52.5200;
$longitude = 13.4050;

$timestamp = mktime(0, 0, 0, 6, 21, 2024); // Sommersonnenwende 2024

$info = date_sun_info($timestamp, $latitude, $longitude);

echo 'Sonnenaufgang: ' . date('H:i:s', $info['sunrise']) . PHP_EOL;
echo 'Sonnenhöchststand: ' . date('H:i:s', $info['transit']) . PHP_EOL;
echo 'Sonnenuntergang: ' . date('H:i:s', $info['sunset']) . PHP_EOL;
Sonnenaufgang: 02:43:04 Sonnenhöchststand: 11:29:09 Sonnenuntergang: 20:15:25

Alle Dämmerungsphasen anzeigen und Sonderfälle behandeln

<?php
// Koordinaten Tromsø, Norwegen (Polarnacht möglich)
$latitude  = 69.6496;
$longitude = 18.9560;

$timestamp = mktime(0, 0, 0, 12, 21, 2023); // Wintersonnenwende

$info = date_sun_info($timestamp, $latitude, $longitude);

$labels = [
    'sunrise'                    => 'Sonnenaufgang',
    'sunset'                     => 'Sonnenuntergang',
    'transit'                    => 'Sonnenhöchststand',
    'civil_twilight_begin'       => 'Bürgerl. Dämmerung Beginn',
    'civil_twilight_end'         => 'Bürgerl. Dämmerung Ende',
    'nautical_twilight_begin'    => 'Nautische Dämmerung Beginn',
    'nautical_twilight_end'      => 'Nautische Dämmerung Ende',
    'astronomical_twilight_begin'=> 'Astronom. Dämmerung Beginn',
    'astronomical_twilight_end'  => 'Astronom. Dämmerung Ende',
];

foreach ($labels as $key => $label) {
    $value = $info[$key];
    if ($value === false) {
        $display = 'Tritt heute nicht auf';
    } elseif ($value === true) {
        $display = 'Dauerhaft (ganztägig)';
    } else {
        $display = date('H:i:s T', $value);
    }
    echo $label . ': ' . $display . PHP_EOL;
}
Sonnenaufgang: Tritt heute nicht auf Sonnenuntergang: Tritt heute nicht auf Sonnenhöchststand: 10:07:12 UTC Bürgerl. Dämmerung Beginn: 09:26:38 UTC Bürgerl. Dämmerung Ende: 10:47:43 UTC Nautische Dämmerung Beginn: 08:33:14 UTC Nautische Dämmerung Ende: 11:41:07 UTC Astronom. Dämmerung Beginn: 07:46:22 UTC Astronom. Dämmerung Ende: 12:27:59 UTC

// Wichtig · Fallstricke

Zeitzonen: Die zurückgegebenen Unix-Timestamps sind zeitzonenunabhängig. Die Ausgabe mit date() nutzt die aktuell gesetzte Zeitzone (date_default_timezone_set() bzw. php.ini). Für ortsrichtige Anzeige sollte die Zeitzone passend zur Koordinate gesetzt werden.

Sonderfälle (Polar-Regionen): An Standorten nahe der Pole kann die Sonne an bestimmten Tagen dauerhaft über oder unter dem Horizont stehen. In diesem Fall liefert die Funktion für betroffene Schlüssel true (dauerhaft über dem Horizont) oder false (dauerhaft unter dem Horizont). Anwendungen sollten diese Fälle explizit prüfen, bevor sie mit dem Wert als Timestamp rechnen.

Genauigkeit: Die Berechnungen basieren auf astronomischen Näherungsformeln und sind für typische Anwendungen ausreichend genau, eignen sich jedoch nicht für hochpräzise wissenschaftliche Berechnungen.