PHP 8.4.1 Released!

date_sun_info

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

date_sun_infoRetourne un tableau avec les informations sur le lever/coucher du soleil ainsi que le début et la fin de l'aube

Description

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

Liste de paramètres

timestamp

Horodatage Unix.

latitude

Latitude, en degrés.

longitude

Longitude, en degrés.

Valeurs de retour

Retourne un tableau dont la structure du tableau est détaillée dans la liste suivante :

sunrise
L'horodatage du levé du soleil (angle de zenith = 90°35').
sunset
L'horodatage du coucher du soleil (angle de zenith = 90°35').
transit
L'horodatage où le soleil est à son zénith, c'est-à-dire a atteint son point le plus haut.
civil_twilight_begin
Le début de l'aube civile (angle de zenith = 96°). Il termine au sunrise.
civil_twilight_end
La fin du crépuscule civil (angle de zenith = 96°). Elle commence au sunset.
nautical_twilight_begin
Le début de l'aube nautique (angle de zenith = 102°). Il termine au civil_twilight_begin.
nautical_twilight_end
La fin du crépuscule nautique (angle de zenith = 102°). Elle commence a civil_twilight_end.
astronomical_twilight_begin
Le début de l'aube astronomique (angle de zenith = 108°). Il termine au nautical_twilight_begin.
astronomical_twilight_end
La fin du crépuscule astronomique (angle de zenith = 108°). Elle commence a nautical_twilight_end.

Les valeurs des éléments du tableau sont soit des timestamps UNIX, false, si le soleil est sous le zenith respectif pour la journée entière, ou true, si le soleil est au dessus du zenith respectif pour toute la journée.

Historique

Version Description
7.2.0 Le calcul a été corrigé en tenant compte du minuit local au lieu du midi local, ce qui modifie légèrement les résultats.

Exemples

Exemple #1 Exemple avec date_sun_info()

<?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";
}
?>

L'exemple ci-dessus va afficher :

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

Exemple #2 Nuit polaire avec un peu de traitement

<?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";
}
?>

L'exemple ci-dessus va afficher :

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

Exemple #3 Soleil de minuit (Tromso, Norvège)

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

L'exemple ci-dessus va afficher :

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
)

Exemple #4 Calcul de la durée du jour (Kyiv)

<?php
$si
= date_sun_info(strtotime('2022-08-26'), 50.45, 30.52);
$diff = $si['sunset'] - $si['sunrise'];
echo
"Durée du jour: ",
floor($diff / 3600), "h ",
floor(($diff % 3600) / 60), "s\n";
?>

L'exemple ci-dessus va afficher :

Durée du jour: 13h 56s

add a note

User Contributed Notes 1 note

up
8
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