date_sun_info()
Узнайте, как date_sun_info() возвращает время восхода, заката и сумерек по дате и координатам. Синтаксис, параметры и примеры.
Введение
Функция date_sun_info() в PHP возвращает время восхода, заката, солнечного полудня и сумерек для конкретной даты и географической точки. Вместо обращения к внешнему сервису вы передаёте метку времени и пару координат и получаете готовый массив Unix-временных меток. На этой странице описаны синтаксис, параметры, возвращаемые значения и полный рабочий пример.
Примечание:
date_sun_info()была объявлена устаревшей в PHP 8.1 и удалена в PHP 8.2. Этот материал предназначен для поддержки устаревшего кода. В современных PHP-приложениях рассмотрите использование внешнего сервиса (например, Sunrise-Sunset API) или специализированной библиотеки, такой какsunrise-sunset-php.
Синтаксис
date_sun_info(int $timestamp, float $latitude, float $longitude): arrayПараметры
| Параметр | Тип | Описание |
|---|---|---|
$timestamp | int | Unix-метка времени (в UTC), определяющая запрашиваемый день. |
$latitude | float | Широта местоположения в градусах. Положительное значение — север, отрицательное — юг. |
$longitude | float | Долгота местоположения в градусах. Положительное значение — восток, отрицательное — запад. |
Возвращаемое значение
Функция возвращает ассоциативный массив Unix-временных меток. Каждый ключ обозначает солнечное событие в указанный день для заданных координат:
| Ключ | Значение |
|---|---|
sunrise | Момент, когда солнце пересекает горизонт на рассвете. |
sunset | Момент, когда солнце пересекает горизонт на закате. |
transit | Солнечный полдень — солнце находится в наивысшей точке. |
civil_twilight_begin / civil_twilight_end | Солнце на 6° ниже горизонта (деятельность на открытом воздухе ещё возможна). |
nautical_twilight_begin / nautical_twilight_end | Солнце на 12° ниже горизонта (горизонт виден в море). |
astronomical_twilight_begin / astronomical_twilight_end | Солнце на 18° ниже горизонта (небо полностью тёмное). |
Если солнце в этот день не восходит или не заходит (например, в полярных регионах летом или зимой), соответствующее значение будет true (солнце над горизонтом весь день) или false (солнце не восходит вовсе) вместо временной метки.
Использование функции date_sun_info()
Поскольку первый аргумент — Unix-метка времени, проще всего создать объект DateTime для нужного дня и передать его метку через getTimestamp(). Процесс выглядит следующим образом:
graph TD;
A[Create DateTime object] --> B[Get timestamp for the date];
B --> C[Call date_sun_info with timestamp + coordinates];
C --> D[Read sunrise / sunset / twilight from the result];Вот полный пример для Лондона, Великобритания:
В этом примере мы создаём объект DateTime, представляющий конкретную дату, и задаём широту и долготу для Лондона. Затем вызываем функцию date_sun_info(), передавая метку времени объекта DateTime вместе с широтой и долготой.
Функция date_sun_info() возвращает массив, содержащий информацию о времени восхода, заката и других связанных событиях для указанной даты и местоположения. Пример вывода:
Array
(
[sunrise] => 1646242025
[sunset] => 1646282555
[transit] => 1646262290
[civil_twilight_begin] => 1646239733
[civil_twilight_end] => 1646284847
[nautical_twilight_begin] => 1646235838
[nautical_twilight_end] => 1646288742
[astronomical_twilight_begin] => 1646231998
[astronomical_twilight_end] => 1646292582
)Значения представляют собой сырые Unix-метки времени, поэтому для их отображения каждое значение форматируется с помощью date() или date_format():
<?php
$sun_info = date_sun_info(strtotime('2023-03-03'), 51.5074, -0.1278);
echo 'Sunrise: ' . date('H:i:s', $sun_info['sunrise']) . "\n";
echo 'Sunset: ' . date('H:i:s', $sun_info['sunset']) . "\n";
?>Примечание о часовых поясах: Функция ожидает Unix-метку времени (UTC). Возвращаемые значения также являются UTC-метками, вычисленными по переданным координатам независимо от локального часового пояса сервера. При форматировании с помощью
date()вывод использует часовой пояс, установленный функциейdate_default_timezone_set(), поэтому задавайте его явно, если нужно отобразить местное время.
Связанные функции
date_sunrise()— возвращает только время восхода для заданного местоположения.date_sunset()— возвращает только время заката для заданного местоположения.- PHP Date and Time — обзор средств работы с датой и временем в PHP.
- PHP Time Zones — как PHP работает с часовыми поясами.
Заключение
date_sun_info() возвращает время восхода, заката, солнечного полудня и трёх фаз сумерек для заданной даты и местоположения в виде массива UTC Unix-меток времени. Передайте метку времени вместе с широтой и долготой, а затем отформатируйте возвращённые значения с помощью date() для их отображения. Функция удобна для погодных приложений, планировщиков и функций с учётом местоположения — однако помните, что она была удалена в PHP 8.2, поэтому в современном коде используйте внешний API или библиотеку.