W3docs

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

Параметры

ПараметрТипОписание
$timestampintUnix-метка времени (в UTC), определяющая запрашиваемый день.
$latitudefloatШирота местоположения в градусах. Положительное значение — север, отрицательное — юг.
$longitudefloatДолгота местоположения в градусах. Положительное значение — восток, отрицательное — запад.

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

Функция возвращает ассоциативный массив 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];

Вот полный пример для Лондона, Великобритания:

php— editable, runs on the server

В этом примере мы создаём объект 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 или библиотеку.

Практика

Практика
Что делает функция 'date_sun_info' в PHP?
Что делает функция 'date_sun_info' в PHP?
Was this page helpful?