date_sun_info

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

date_sun_infoRetorna un array con las informaciones sobre el amanecer/atardecer así como el inicio y el fin del amanecer

Descripción

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

Parámetros

timestamp

Timestamp Unix.

latitude

Latitud, en grados.

longitude

Longitud, en grados.

Valores devueltos

Retorna un array cuya estructura del array se detalla en la lista siguiente:

sunrise
El timestamp del amanecer (ángulo de zenit = 90°35').
sunset
El timestamp del atardecer (ángulo de zenit = 90°35').
transit
El timestamp donde el sol está en su cenit, es decir ha alcanzado su punto más alto.
civil_twilight_begin
El inicio del amanecer civil (ángulo de zenit = 96°). Termina en el sunrise.
civil_twilight_end
El fin del crepúsculo civil (ángulo de zenit = 96°). Comienza en el sunset.
nautical_twilight_begin
El inicio del amanecer náutico (ángulo de zenit = 102°). Termina en el civil_twilight_begin.
nautical_twilight_end
El fin del crepúsculo náutico (ángulo de zenit = 102°). Comienza en civil_twilight_end.
astronomical_twilight_begin
El inicio del amanecer astronómico (ángulo de zenit = 108°). Termina en el nautical_twilight_begin.
astronomical_twilight_end
El fin del crepúsculo astronómico (ángulo de zenit = 108°). Comienza en nautical_twilight_end.

Los valores de los elementos del array son timestamps UNIX, false, si el sol está bajo el zenit respectivo durante todo el día, o true, si el sol está sobre el zenit respectivo durante todo el día.

Historial de cambios

Versión Descripción
7.2.0 El cálculo ha sido corregido teniendo en cuenta la medianoche local en lugar del mediodía local, lo que modifica ligeramente los resultados.

Ejemplos

Ejemplo #1 Ejemplo con 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";
}
?>

El resultado del ejemplo sería:

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

Ejemplo #2 Noche polar con un poco de tratamiento

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

El resultado del ejemplo sería:

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

Ejemplo #3 Sol de medianoche (Tromso, Noruega)

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

El resultado del ejemplo sería:

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
)

Ejemplo #4 Cálculo de la duración del día (Kiev)

<?php
$si
= date_sun_info(strtotime('2022-08-26'), 50.45, 30.52);
$diff = $si['sunset'] - $si['sunrise'];
echo
"Duración del día: ",
floor($diff / 3600), "h ",
floor(($diff % 3600) / 60), "s\n";
?>

El resultado del ejemplo sería:

Duración del día: 13h 56s

add a note

User Contributed Notes 1 note

up
8
TheFax
2 years 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