Как определить длительность дня средствами PHP (function date_sunrise date_sunset date_sun_info)

Интересные функции появилась в версии PHP 5.1.2. Они позволяет опеределить длительность дня по заданным координатам. каким образом? Очень просто, можно узнать когда взойдет солнце, и когда будет его закат. с точностью до секунды.

date_sunrise- функция позволяет определять время в часах, минутах и секундах, когда произойдет восход солнца.

$date = strtotime(«2009-04-21″);
$latitude = 14.283;
// северная широта — знак плюс, южная — минус
$longitude = 28.25;
// восточная долгота — плюс, западная — минус
$sunrise = date_sunrise(
$date, // Метка времени (даты)
SUNFUNCS_RET_TIMESTAMP, // Возвращаем тоже метку
$latitude,
$longitude
);

Сначала преобразуем желаемую дату в метку времени (количество секунд от стартовой даты , в PHP стартовая дата это какойто день 1970 года вроде бы 1 января) с помощью функции strtotime. Потом нам, естественно, нужно задать широту и долготу места на земле, у которого мы хотим определить время восхода и захода Солнца.Задается все в градусах. Координаты можно взять с какого нибуть онлайн сервиса тогоже GoogleMaps.

Второй параметр функции говорит о том, что мы хотим вернуть метку времени вместо текстовой строки. Если бы мы хотели, чтобы функция вернула строку, вторым параметром мы бы указали SUNFUNCS_RET_STRING. Тогда она вернула бы не число, а что-то вроде «8:30».

Далее, чтобы превратить метку времени с строку, делаем так:

echo ‘Sunrise: ‘.date(’H:i:s’, $sunrise);

Функция date вернет текстовое представление метки времени, в данном случае в формате ЧЧ:ММ:СС.

Если бы мы указали вторым параметром функции date_sunrise SUNFUNCS_RET_STRING, то преобразовывать метку времени с помощью функции date нам бы не пришлось. Но функция в этом случае вернет время без учета летнего. Поэтому, чтобы учитывать переход на летнее время, используем функцию date.

date_sunset — функция аналогична предыдущей, только возвращает время захода Солнца.

$date = strtotime(«2008-06-10″);
$latitude = 54.283;
$longitude = 48.25;

$sunrise = date_sunset(
$date, // Метка времени (даты)
SUNFUNCS_RET_TIMESTAMP, // Возвращаем тоже метку
$latitude, // Широта
$longitude // Долгота
);

Ну и напоследок, как можно догадаться, чтобы определить длительность дня, нужно из одной даты вычесть другую.

$date = strtotime(«2009-04-21″);
$latitude = 14.283;
$longitude = 28.25;

$sunrise = date_sunrise($date, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude);
$sunset = date_sunset($date, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude);

echo ‘Sunrise: ‘.date(‘H:i:s’, $sunrise);
echo ‘
‘;
echo ‘Sunset: ‘.date(‘H:i:s’, $sunset);
echo ‘
‘;

$day_length = $sunset — $sunrise;
echo gmdate(«H:i:s», $day_length);

в результате получим параметр отображающий сколько длится день в часах : минутах : секундах

date_sun_info — функция позволяет определять время восхода и захода Солнца, в какой час и минуту Солнце будет в зените в заданный день, время начала и окончания сумерек.

$sun_info = date_sun_info(strtotime(”2009-04-21?), 18.25, 24.283);

В этой функции долгота и широта меняются местами в параметрах. Второй параметр — долгота, третий — широта. Эта функция возвращает массив с информацией, которую мы можем получить следующим образом:

$sun_info = date_sun_info(strtotime(«2009-04-21″), 18.25, 24.283);

foreach ($sun_info as $key => $val) {

if ($key == ‘sunrise’) {

$sunrise = $val;
echo ‘Восход: ‘.date(«H:i:s», $sunrise).’
‘;

}

if ($key == ‘sunset’) {

$sunset = $val;
$day_length = $sunset — $sunrise;
echo ‘Заход: ‘.date(«H:i:s», $sunset).’
‘;
echo ‘Долгота дня: ‘.gmdate(«H:i:s», $day_length).’
‘;

}

if ($key == ‘transit’) {
echo ‘В зените: ‘.date(«H:i:s», $val).’
‘;
}

if ($key == ‘civil_twilight_begin’) {
echo ‘Начало утренних сумерек: ‘.date(«H:i:s», $val).’
‘;
}

if ($key == ‘civil_twilight_end’) {
echo ‘Конец вечерних сумерек: ‘.date(«H:i:s», $val).’
‘;
}

}

  • Как определить что посетитель смотрит сайт через Safari в iPhone ?
  • Оставить комментарий