PHP 8.0.24 Released!

date_sun_info

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

date_sun_info Возвращает массив с информацией о закате/рассвете и начале/окончании сумерек

Описание

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

Список параметров

timestamp

Временная метка Unix.

latitude

Широта в градусах.

longitude

Долгота в градусах.

Возвращаемые значения

Возвращает массив в случае успешного выполнения или false в случае возникновения ошибки. Структура массива подробно описана в следующем списке:

sunrise
Временная метка восхода солнца (зенитный угол = 90°35').
sunset
Временная метка заката солнца (зенитный угол = 90°35').
transit
Временная метка, когда солнце находится в своём зените, то есть достигло самой верхней точки.
civil_twilight_begin
Начало гражданского рассвета (зенитный угол = 96°). Оно заканчивается на sunrise.
civil_twilight_end
Конец гражданского заката (зенитный угол = 96°). Оно начинается на sunset.
nautical_twilight_begin
Начало навигационного рассвета (зенитный угол = 102°). Оно заканчивается civil_twilight_begin.
nautical_twilight_end
Конец навигационного заката (зенитный угол = 102°). Оно начинается на civil_twilight_end.
astronomical_twilight_begin
Начало астрономического рассвета (зенитный угол = 108°). Оно заканчивается на nautical_twilight_begin.
astronomical_twilight_end
Конец астрономического заката (зенитный угол = 108°). Оно начинается на nautical_twilight_end.

Значения элементов массива - либо временная метка UNIX, false, если солнце находится ниже соответствующего зенита в течение всего дня, или true, если солнце находится выше соответствующего зенита в течение всего дня.

Список изменений

Версия Описание
7.2.0 Расчёт был исправлен с учётом местной полуночи вместо местного полудня, что несколько изменяет результаты.

Примеры

Пример #1 Пример использования date_sun_info()

<?php
$sun_info 
date_sun_info(strtotime("2006-12-12"), 31.766735.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

Пример #2 Полярная ночь с некоторой обработкой

<?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

Пример #3 Полуночное солнце (Тромсё, Норвегия)

<?php
$si 
date_sun_info(strtotime("2022-06-26"), 69.6818.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
)

Пример #4 Вычисление продолжительности дня (Киев)

<?php
$si 
date_sun_info(strtotime('2022-08-26'), 50.4530.52);
$diff $si['sunset'] - $si['sunrise'];
echo 
"Продолжительность дня: ",
    
floor($diff 3600), " ч. ",
    
floor(($diff 3600) / 60), " сек.\n";
?>

Результат выполнения данного примера:

Продолжительность дня: 13 ч. 56 сек.

Смотрите также

  • date_sunrise() - Возвращает время рассвета для заданных дня и местоположения
  • date_sunset() - Возвращает время захода солнца для заданных дня и местоположения

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top