Date sunrise: примеры (PHP)
date_sunrise(int $timestamp, int $return_format = SUNFUNCS_RET_STRING, ?float $latitude = null, ?float $longitude = null, ?float $zenith = null, ?float $utc_offset = 0): mixedФункция date_sunrise() возвращает время восхода солнца для заданной географической точки и даты. Её применение актуально в приложениях, связанных с астрономией, фотографией, сельским хозяйством или планированием событий на открытом воздухе. В PHP 8.1 функция объявлена устаревшей, и рекомендуется использовать date_sun_info().
Синтаксис функции: date_sunrise(timestamp, format, latitude, longitude, zenith, gmt_offset).
- timestamp (int): Обязательный. Метка времени Unix для нужного дня.
- format (int): Определяет формат возвращаемого времени. Константы: SUNFUNCS_RET_STRING (строка HH:MM), SUNFUNCS_RET_DOUBLE (float, часы.часть), SUNFUNCS_RET_TIMESTAMP (метка времени Unix).
- latitude (float): Широта в градусах. Положительные значения для северного полушария.
- longitude (float): Долгота в градусах. Положительные значения для восточного полушария.
- zenith (float): Угол зенита. По умолчанию: date_sunrise(ZENITH). Можно использовать свои значения.
- gmt_offset (float): Смещение от GMT в часах. Например, 3 для MSK (зимой).
echo date_sunrise(time(), SUNFUNCS_RET_STRING, 55.751244, 37.618423, 90.583333, 3);06:45
echo date_sunrise(strtotime('2023-06-21'), SUNFUNCS_RET_DOUBLE, 55.751244, 37.618423, 90.583333, 3);3.85
echo date_sunrise(strtotime('2023-12-21'), SUNFUNCS_RET_TIMESTAMP, 55.751244, 37.618423, 90.583333, 3);
echo ' -> ' . date('H:i', 1703123100);1703123100 -> 08:45
Основной современной альтернативой является функция date_sun_info(). Она возвращает массив с различными солнечными событиями для заданной даты и координат, включая восход и закат.
$info = date_sun_info(strtotime('2023-06-21'), 55.751244, 37.618423);
print_r($info);Array
(
[sunrise] => 1703123100
[sunset] => 1703179800
[transit] => ...
...
)Использование date_sun_info() предпочтительнее, так как функция не устарела и предоставляет больше данных одним вызовом.
// Указано смещение UTC+3, но сервер в UTC.
echo date_sunrise(time(), SUNFUNCS_RET_STRING, 55.75, 37.62, 90.583333, 0);03:45 // Время может не соответствовать ожидаемому локальному.
// Запрос для местности за полярным кругом зимой.
$result = date_sunrise(strtotime('2023-12-21'), SUNFUNCS_RET_STRING, 70.0, 30.0, 90.583333, 3);
var_dump($result);bool(false) // Солнце не восходит, функция возвращает false.
// В PHP 8.1+ вызов вызовет предупреждение об устаревании.
// @date_sunrise(...); или лучше перейти на date_sun_info().Начиная с PHP 8.1.0, функция date_sunrise() (а также date_sunset()) объявлена устаревшей. Её использование вызывает предупреждение уровня E_DEPRECATED. Причина устаревания - наличие более совершенной и удобной альтернативы date_sun_info(). В будущих основных версиях PHP функция может быть удалена.
$timestamp = strtotime('2023-06-21');
$lat = 55.751244;
$lng = 37.618423;
$gmt_offset = 3;
$sunrise_ts = date_sunrise($timestamp, SUNFUNCS_RET_TIMESTAMP, $lat, $lng, 90.583333, $gmt_offset);
$sunset_ts = date_sunset($timestamp, SUNFUNCS_RET_TIMESTAMP, $lat, $lng, 90.583333, $gmt_offset);
$daylight_duration = ($sunset_ts - $sunrise_ts) / 3600; // в часах
echo "Продолжительность светового дня: $daylight_duration часов";Продолжительность светового дня: 17.5 часов
// Гражданские сумерки (солнце на 6° ниже горизонта)
$civil_twilight = date_sunrise(time(), SUNFUNCS_RET_STRING, 55.75, 37.62, 96, 3);
echo "Начало гражданских сумерек (восход): $civil_twilight";Начало гражданских сумерек (восход): 06:12
$cities = [
["Москва", 55.75, 37.62],
["Санкт-Петербург", 59.93, 30.31],
["Сочи", 43.59, 39.72]
];
$date = strtotime('today');
foreach ($cities as $city) {
list($name, $lat, $lng) = $city;
$time = date_sunrise($date, SUNFUNCS_RET_STRING, $lat, $lng, 90.583333, 3);
echo "$name: $time
";
}Москва: 06:45
Санкт-Петербург: 07:02
Сочи: 06:12
$result = @date_sunrise(strtotime('2023-12-21'), SUNFUNCS_RET_STRING, 80.0, 30.0, 90.583333, 3);
if ($result === false) {
echo "В этот день на указанной широте солнце не восходит (полярная ночь).";
}В этот день на указанной широте солнце не восходит (полярная ночь).
from astral import LocationInfo
from astral.sun import sunrise
from datetime import date
city = LocationInfo("Moscow", "Russia", "Europe/Moscow", 55.751244, 37.618423)
s = sunrise(city.observer, date=date(2023, 6, 21), tzinfo=city.timezone)
print(s)2023-06-21 03:45:00+03:00
// Упрощенный пример. На практике используют библиотеки.
function getSunrise(lat, lng, date) {
// ... сложные астрономические расчеты ...
return new Date(...);
}
console.log(getSunrise(55.751244, 37.618423, new Date('2023-06-21')));