PHP.nl

date_sun_info

date_sun_info

Returns an array with information about sunset/sunrise and twilight begin/end

array **date_sun_info** int $timestamp float $latitude float $longitude

timestampUnix timestamp.

latitudeLatitude in degrees.

longitudeLongitude in degrees.

Returns an array whose structure is detailed in the following list:

sunriseThe timestamp of the sunrise (zenith angle = 90°35').

sunsetThe timestamp of the sunset (zenith angle = 90°35').

transitThe timestamp when the sun is at its zenith, i.e. has reached its topmost point.

civil_twilight_begin The start of the civil dawn (zenith angle = 96°). It ends at . sunrise

civil_twilight_end The end of the civil dusk (zenith angle = 96°). It starts at . sunset

nautical_twilight_begin The start of the nautical dawn (zenith angle = 102°). It ends at . civil_twilight_begin

nautical_twilight_end The end of the nautical dusk (zenith angle = 102°). It starts at . civil_twilight_end

astronomical_twilight_begin The start of the astronomical dawn (zenith angle = 108°). It ends at . nautical_twilight_begin

astronomical_twilight_end The end of the astronomical dusk (zenith angle = 108°). It starts at . nautical_twilight_end

The values of the array elements are either UNIX timestamps, false if the sun is below the respective zenith for the whole day, or true if the sun is above the respective zenith for the whole day.

Voorbeeld: A example

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

Voorbeeld: Polar night, with some processing

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

Voorbeeld: Midnight sun (Tromsø, Norway)

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

Voorbeeld: Calculating length of day (Kyiv)

<?php
$si = date_sun_info(strtotime('2022-08-26'), 50.45, 30.52);
$diff = $si['sunset'] - $si['sunrise'];
echo "Length of day: ",
    floor($diff / 3600), "h ",
    floor(($diff % 3600) / 60), "s\n";
Length of day: 13h 56s