PHP 8.4.1 Released!

date_sun_info

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

date_sun_infoLiefert ein Array mit Informationen über Sonnenauf- und -untergang sowie Beginn und Ende der Dämmerung

Beschreibung

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

Parameter-Liste

timestamp

Ein Unix-Zeitstempel

latitude

Eine geografische Breite in Grad

longitude

Eine geografische Länge in Grad

Rückgabewerte

Gibt bei Erfolg ein Array zurück, dessen Struktur in der folgenden Liste beschrieben wird:

sunrise
Der Zeitstempel des Sonnenaufgangs (Zenitwinkel = 90°35').
sunset
Der Zeitstempel des Sonnenuntergangs (Zenitwinkel = 90°35').
transit
Der Zeitstempel, wenn die Sonne im Zenit steht, d. h. wenn sie ihren höchsten Punkt erreicht hat.
civil_twilight_begin
Der Beginn der bürgerlichen Morgendämmerung (Zenitwinkel = 96°); sie endet bei sunrise.
civil_twilight_end
Das Ende der bürgerlichen Abenddämmerung (Zenitwinkel = 96°); sie beginnt bei sunset.
nautical_twilight_begin
Der Beginn der nautischen Morgendämmerung (Zenitwinkel = 102°); sie endet bei civil_twilight_begin.
nautical_twilight_end
Das Ende der nautischen Abenddämmerung (Zenitwinkel = 102°); sie beginnt bei civil_twilight_end.
astronomical_twilight_begin
Der Beginn der astronomischen Morgendämmerung (Zenitwinkel = 108°); sie endet bei nautical_twilight_begin.
astronomical_twilight_end
Das Ende der astronomischen Abenddämmerung (Zenitwinkel = 108°); sie beginnt bei nautical_twilight_end.

Die Werte der Array-Elemente sind entweder UNIX-Zeitstempel, false, wenn die Sonne den ganzen Tag unter dem jeweiligen Zenit steht, oder true, wenn die Sonne den ganzen Tag über dem jeweiligen Zenit steht.

Changelog

Version Beschreibung
7.2.0 Die Berechnung wurde korrigiert und bezieht sich nun auf die lokale Mitternacht statt auf die lokale Mittagszeit, was die Ergebnisse leicht verändert.

Beispiele

Beispiel #1 Ein date_sun_info()-Beispiel

<?php
$sun_info
= date_sun_info(strtotime("2006-12-12"), 31.7667, 35.2333);
foreach (
$sun_info as $key => $val) {
echo
"$key: " . date("H:i:s", $val) . "\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

sunrise: 05:52:11
sunset: 15:41:21
transit: 10:46:46
civil_twilight_begin: 05:24:08
civil_twilight_end: 16:09:24
nautical_twilight_begin: 04:52:25
nautical_twilight_end: 16:41:06
astronomical_twilight_begin: 04:21:32
astronomical_twilight_end: 17:12:00

Beispiel #2 Polarnacht mit etwas Nachbearbeitung

<?php
$tz
= new \DateTimeZone('America/Anchorage');

$si = date_sun_info(strtotime("2022-12-21"), 70.21, -148.51);
foreach (
$si as $key => $value) {
echo
match (
$value) {
true => 'always',
false => 'never',
default =>
date_create("@{$value}")->setTimeZone($tz)->format( 'H:i:s T' ),
},
": {$key}",
"\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

never: sunrise
never: sunset
12:52:18 AKST: transit
10:53:19 AKST: civil_twilight_begin
14:51:17 AKST: civil_twilight_end
09:01:47 AKST: nautical_twilight_begin
16:42:48 AKST: nautical_twilight_end
07:40:47 AKST: astronomical_twilight_begin
18:03:49 AKST: astronomical_twilight_end

Beispiel #3 Mitternachtssonne (Tromsø, Norwegen)

<?php
$si
= date_sun_info(strtotime("2022-06-26"), 69.68, 18.94);
print_r($si);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [sunrise] => 1
    [sunset] => 1
    [transit] => 1656240426
    [civil_twilight_begin] => 1
    [civil_twilight_end] => 1
    [nautical_twilight_begin] => 1
    [nautical_twilight_end] => 1
    [astronomical_twilight_begin] => 1
    [astronomical_twilight_end] => 1
)

Beispiel #4 Berechnung der Länge des Tages (Kiew)

<?php
$si
= date_sun_info(strtotime('2022-08-26'), 50.45, 30.52);
$diff = $si['sunset'] - $si['sunrise'];
echo
"Länge des Tages: ",
floor($diff / 3600), "h ",
floor(($diff % 3600) / 60), "s\n";
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Länge des Tages: 13h 56s

add a note

User Contributed Notes 1 note

up
9
TheFax
1 year ago
In the last example, conversion from seconds to Hour, Minutes, Seconds is wrong.
This is the correct verion:

<?php
$si
= date_sun_info(strtotime('2022-08-26'), 50.45, 30.52);
$diff = $si['sunset'] - $si['sunrise']; # $diff is measured in seconds.
echo "Length of day: ",
floor($diff / 3600), "h",
floor(($diff % 3600) / 60), "m",
floor($diff % 60), "s\n";
?>

Output:
Length of day: 13h53m15s
To Top