date_sunset

(PHP 5, PHP 7, PHP 8)

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

Внимание

Функция УСТАРЕЛА, начиная с PHP 8.1.0. Полагаться на эту функцию крайне не рекомендуется. Используйте вместо неё функцию date_sun_info().

Описание

date_sunset(
    int $timestamp,
    int $returnFormat = SUNFUNCS_RET_STRING,
    ?float $latitude = null,
    ?float $longitude = null,
    ?float $zenith = null,
    ?float $utcOffset = null
): string|int|float|false

date_sunset() возвращает время захода солнца для определённых дня (заданного аргументом timestamp) и местоположения.

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

timestamp

Временная метка (timestamp) дня, для которого определяется время захода солнца.

returnFormat

Константы returnFormat
константа описание пример
SUNFUNCS_RET_STRING тип возвращаемого результата string 16:46
SUNFUNCS_RET_DOUBLE тип возвращаемого результата float 16.78243132
SUNFUNCS_RET_TIMESTAMP тип возвращаемого результата int (временная метка) 1095034606

latitude

По умолчанию в Северном полушарии, для Южного передаётся отрицательная величина. Смотрите также date.default_latitude.

longitude

По умолчанию восточная, для указания западной долготы передаётся отрицательная величина. Смотрите также date.default_longitude.

zenith

zenith - это угол между центром Солнца и линией, перпендикулярной поверхности Земли. По умолчанию date.sunset_zenith

Распространённые углы zenith
Угол Описание
90°50' Восход солнца: точка, где Солнце становится невидимым.
96° Гражданские сумерки: обычно используются для обозначения конца заката.
102° Навигационные сумерки: точка, в которой горизонт становится невидимым с моря.
108° Астрономические сумерки: точка, в которой Солнце заканчивает быть источником любого освещения.

utcOffset

Задаётся в часах. utcOffset игнорируется, если returnFormat - SUNFUNCS_RET_TIMESTAMP.

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

Возвращает время захода солнца в заданном формате returnFormat или false в случае возникновения ошибки. Одна из возможных причин неудачного выполнения - солнце не поднимается над горизонтом вообще, что происходит внутри полярных кругов в течение части года.

Ошибки

Каждый вызов к функциям даты/времени при неправильных настройках часового пояса сгенерирует ошибку уровня E_WARNING, если часовой пояс некорректный. Смотрите также date_default_timezone_set()

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

Версия Описание
8.1.0 Функция объявлена устаревшей, используйте вместе неё date_sun_info().
8.0.0 latitude, longitude, zenith и utcOffset теперь допускают значение null.

Примеры

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

<?php

/* calculate the sunset time for Lisbon, Portugal
Latitude: 38.4 North
Longitude: 9 West
Zenith ~= 90
offset: +1 GMT
*/

echo date("D M d Y"). ', время захода солнца : ' .date_sunset(time(), SUNFUNCS_RET_STRING, 38.4, -9, 90, 1);

?>

Вывод приведённого примера будет похож на:

Mon Dec 20 2004, время захода солнца : 18:13

Пример #2 Нет заката

<?php
$solstice
= strtotime('2017-12-21');
var_dump(date_sunset($solstice, SUNFUNCS_RET_STRING, 69.245833, -53.537222));
?>

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

bool(false)

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

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

add a note add a note

User Contributed Notes 3 notes

up
1
matt at mctsoft dot net
5 years ago
yes SUNFUNCS_RET_TIMESTAMP does return GMT(0) time

so something like...

$arr = localtime(date_sunset(time(),SUNFUNCS_RET_TIMESTAMP,51.5,0)); // London

$hh = $arr[2];
$mm = $arr[1];

Will give figure out your localtime and daylight saving (BST)
up
-1
nospam at nomail dot com
6 years ago
maybe I am wrong, but I think

SUNFUNCS_RET_TIMESTAMP     return GMT(0) time

SUNFUNCS_RET_STRING     Return local time
SUNFUNCS_RET_DOUBLE     Return local time
up
-25
michael at dayah dot com
18 years ago
I use an IP to location database to determine the visitor's approximate latitude and longitude and then serve them a day or night color scheme based on whether it is before civil dawn or dusk. I've had problems when not specifying the timezone, specifically a 1 hour error, so I use GMT.

<?php
date_default_timezone_set
("GMT");

function
scheme() {
       
$sunrise = date_sunrise(time(), SUNFUNCS_RET_DOUBLE, $latitude, $longitude, 96, 0);
       
$sunset = date_sunset(time(), SUNFUNCS_RET_DOUBLE, $latitude, $longitude, 96, 0);
       
$now = date("H") + date("i") / 60 + date("s") / 3600;

        if (
$sunrise < $sunset)
                if ((
$now > $sunrise) && ($now < $sunset)) return "day";
                else return
"night";
        else
                if ((
$now > $sunrise) || ($now < $sunset)) return "day";
                else return
"night";
}
?>
To Top