Временные зоны в PHP
По умолчанию интерпретатор PHP использует настройки даты и времени, предоставляемые системой, где размещается веб-сервер, однако данные настройки можно изменить. Это рекомендуется, если сайт ориентирован на пользователей, находящихся в значительно отдалённых странах нежели той, где располагается хостинг, или когда необходимо подстроить какой-либо скрипт под собственные нужды.
В официальном справочнике языка, доступном на русском и десятке других языков, содержится раздел «Функции даты и времени», содержащий полный список связанных с этой темой элементов.
Поддерживаемые зоны
Список, актуальный для восьмой спецификации языка, охватывает следующие территории:
- Европа;
- Тихий океан;
- Атлантика;
- Азия;
- Австралия;
- Индия;
- Америка;
- Антарктика;
- Арктика;
- прочие, не рекомендуемые для использования и существующие в качестве исправлений ошибок, возникающих при запуске на устаревших ОС.
Задать данные вида «Europe/London», «Europe/Volgograd» можно для функции date_default_timezone_set();, служащей для переопределения параметров времени при выполнении конкретного скрипта, и подобных. Также показатели могут учитываться в ходе проверок с задействованием конструкции if-elseif-else.
Константы
Создателями языка создано несколько заранее установленных констант, одной из которых является DateTime::ATOM (она же DATE_ATOM), выдающая информацию в формате ISO-8601. Более привычный видtimestamp имеет значение,вызванное с помощью DateTime::RFC1123 или DATE_RFC1123.
В версии 5.1.2 введены следующие константы:
- SUNFUNCS_RET_TIMESTAMP – секунды, прошедшие с 1 января 1970 года и являющиеся предметом «Проблемы 2038 года», вызванной особенностью хранения данных вUNIX-системах;
- SUNFUNCS_RET_STRING– время в виде «часы:минуты»;
- SUNFUNCS_RET_DOUBLE – часы в виде десятичной дроби.
В более глобальном, но раннем обновлении, 5.0.0, появились функции date_sunrise(); и date_sunset();, служащие для вывода информации о рассвете и закате для определённого местоположения. Они и поддерживают содержащиеся в списке выше элементы.
Варианты использования
Следующие примеры помогут разобраться с основами работы с данными о времени в PHP.
Переназначение пояса и вывод времени
<?php
$date = «Europe/London»;
date_default_timezone_set($date);
echodate(«H:i:s».» «.»d.m.y»);
Выведутся время и дата в Лондоне, зависящая от момента исполнения скрипта. На момент написания статьи результатом была строка «16:10:55 10.03.21».
Получение данных о закате
<?php
/*
Вычисление времени заката по координатам.
54.6789474577325, 25.275143290542303 -> 54.67 и 25.27 соответственно
Угол зенита: 90 градусов. Примерно тогда Солнце скрывается за горизонтом, но ещё некоторое время продолжает светить.
Часовой пояс: UTC.
*/
$sunset = date_sunset(time(), SUNFUNCS_RET_STRING, 54.67, 25.27, 90, 0);
echo»Закат в Вильнюсе состоится в «.$sunset.» по UTC»;
Комментарии приведены по ходу программы.