Настроить свое время php
Поведение этих функций зависит от установок в php.ini .
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
date.default_latitude | «31.7667» | PHP_INI_ALL | |
date.default_longitude | «35.2333» | PHP_INI_ALL | |
date.sunrise_zenith | «90.833333» | PHP_INI_ALL | До PHP 8.0.0 значение по умолчанию было «90.583333». |
date.sunset_zenith | «90.833333» | PHP_INI_ALL | До PHP 8.0.0 значение по умолчанию было «90.583333». |
date.timezone | «UTC» | PHP_INI_ALL |
Для подробного описания констант PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.
Краткое разъяснение конфигурационных директив.
Широта по умолчанию. в диапазоне от 0 на экваторе до +90 к северу и -90 к югу.
Долгота по умолчанию. в диапазоне от 0 на нулевом меридиане до +180 на восток и -180 на запад.
Угол, под которым солнце светит во время восхода.
Значение по умолчанию составляет 90°50′. Дополнительные 50′ обусловлены двумя компонентами: радиусом Солнца, который составляет 16′ и атмосферной рефракцией, которая составляет 34′.
Угол, под которым солнце светит во время заката.
Часовой пояс, используемый по умолчанию всеми функциями даты/времени. Порядок приоритета используемых часовых поясов описан на странице date_default_timezone_get() . Смотрите также Список поддерживаемых часовых поясов.
Замечание: Первые четыре опции настройки в настоящее время используются только в функциях date_sunrise() и date_sunset() .
User Contributed Notes
Установка временнОй зоны в PHP
Иногда возникает такая ситуация, что текущее время на сервере не соответствует вашему текущему часовому поясу или часовому поясу региона, на который ориентирован ваш сайт.
Чтобы было понятно, напомню: территориально Россия очень большая, и далеко не всем нужно, чтобы их сайты «жили» по московскому времени. Например, Урал, Сибирь, Дальний восток и т.д.
Серверы большинства популярных российских хостинг-провайдеров размещены на технологических площадках Москвы и Санкт-Петербурга и по-умолочанию настроены, естественно, на московскую временну́ю зону. Сервер не может автоматически подстраиваться под ваше текущее местоположение и переводить системные часы. В связи с чем, работа функций даты и времени на сайте может быть не совсем корректной. Естественно, сейчас речь не идёт о CMS, в которых поправка часового пояса обычно присутствует прямо в интерфейсе администратора.
В первую очередь проверьте текущее состояние с помощью PHP-кода:
Хорошо, если у вас свой сервер и имеется доступ к php.ini, где можно задать нужную временну́ю зону и забыть. Например, таким образом:
date.timezone = Europe/Moscow
Правда, если на сервере размещены несколько проектов, в которых должны поддерживаться различные часовые пояса, тогда лучше этого не делать. В этом случае будет правильнее задать временные зоны только для проектов, где один часовой пояс.
Установка временной зоны на виртуальном хостинге
На виртуальном хостинге, доступа к конфигам сервера чаще всего нет. Поэтому, в первую очередь попробуйте задать временну́ю зону с помощью .htaccess. Просто найдите или создайте в корне своего сайта файл .htaccess и добавьте в него такую строку:
php_value date.timezone "Europe/Moscow"
Если способ не сработает, тогда воспользуемся функцией date_default_timezone_set(), которая устанавливает временную зону по умолчанию для всех функций даты и времени. Для этого нужно где-нибудь в начале скрипта просто добавьте такую строку:
date_default_timezone_set('Europe/Moscow');
Естественно, Europe/Moscow меняется на необходимый вам часовой пояс. Для территории РФ в PHP поддерживаются следующие временные зоны:
- Europe/Moscow
- Europe/Samara
- Europe/Kaliningrad
- Europe/Volgograd
- Asia/Anadyr
- Asia/Kamchatka
- Asia/Krasnoyarsk
- Asia/Magadan
- Asia/Novokuznetsk
- Asia/Novosibirsk
- Asia/Omsk
- Asia/Sakhalin
- Asia/Vladivostok
- Asia/Yakutsk
- Asia/Yekaterinburg
Со списком всех доступных временных зон можно ознакомиться по ссылке или выполнить команду, которая возвратит вам список временных зон, доступных на вашем сервере.
print_r(DateTimeZone::listIdentifiers());
⚡️ Подписывайся на мой канал @DanilinBiz и ты узнаешь, почему фриланс это свобода, а работа в штате рабство.
Делаю сайты на Вордпресс с 2008 года, в том числе уникальные инструменты для решения сложных бизнес‑задач.
Установка корректного времени на сайте и сервере
Из-за постоянных изменений с переходом на зимнее-летнее время в РФ это самое время может отображаться на вашем сайте и на сервере некорректно. К тому же время PHP (если собран без опции --with-system-tzdata) и системное время — разные вещи. Поэтому нужно проводить две настройки.
Как-то помучился с поиском решения, разрозненной информации в инете полно, вот «комплексное» решение этой проблемки, делюсь…
У меня «родная» временная зона Europe/Moscow, но время на сервере бежало вперёд на час, поэтому я корректировал на сервере и в php таймзону на Europe/Kaliningrad. Для PHP прописал в etc/php5/apache2/php.ini:
date.timezone = "Europe/Kaliningrad"
Но это как бы «костыли». Будем делать «по феншую»…
Для PHP нужно установить или обновить timezonedb:
echo "extension=timezonedb.so" > /etc/php5/conf.d/timezonedb.ini
Перезапускаем веб-сервер и радуемся…
Если у вас не обновлялась база часовых поясов в системе, то загружаем и ставим последнюю версию:
mkdir ~/timezone cd ~/timezone wget ftp://ftp.iana.org/tz/tzdata-latest.tar.gz tar zxvf tzdata-latest.tar.gz zic europe ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
В некоторых дистрибутивах Linux вместо ссылки используется копирование скомпилированного файла в /etc/localtime.
Не забудьте убрать «костыли», если подбирали подходящую зону для корректировки времени.
date
Возвращает строку, отформатированную в соответствии с указанным в параметре format шаблоном. Используется метка времени, заданная параметром timestamp (метка времени Unix), или текущее системное время, если параметр timestamp не задан. Таким образом, параметр timestamp является необязательным и по умолчанию равен значению, возвращаемому функцией time() .
Метки времени Unix не обрабатывают часовые пояса. Используйте класс DateTimeImmutable и его метод форматирования DateTimeInterface::format() для форматирования информации о дате/времени с привязкой к часовому поясу.
Список параметров
Замечание: Функция date() всегда будет генерировать 000000 в качестве микросекунд, поскольку она принимает параметр int , тогда как DateTime::format() поддерживает микросекунды, если DateTime был создан с микросекундами.
Необязательный параметр timestamp представляет собой метку времени типа int , по умолчанию равную текущему локальному времени, если timestamp не указан или null . Другими словами, значение по умолчанию равно результату функции time() .
Возвращаемые значения
Возвращает отформатированную строку с датой.
Ошибки
Каждый вызов к функциям даты/времени при неправильных настройках часового пояса сгенерирует ошибку уровня E_WARNING , если часовой пояс некорректный. Смотрите также date_default_timezone_set()
Список изменений
Версия | Описание |
---|---|
8.0.0 | timestamp теперь допускает значение null. |
Примеры
Пример #1 Примеры использования функции date()
// установка часового пояса по умолчанию.
date_default_timezone_set ( 'UTC' );
?php
// выведет примерно следующее: Monday
echo date ( "l" );
// выведет примерно следующее: Monday 8th of August 2005 03:12:46 PM
echo date ( 'l jS \of F Y h:i:s A' );
// выведет: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " . date ( "l" , mktime ( 0 , 0 , 0 , 7 , 1 , 2000 ));
/* пример использования константы в качестве форматирующего параметра */
// выведет примерно следующее: Mon, 15 Aug 2005 15:12:46 UTC
echo date ( DATE_RFC822 );
// выведет примерно следующее: 2000-07-01T00:00:00+00:00
echo date ( DATE_ATOM , mktime ( 0 , 0 , 0 , 7 , 1 , 2000 ));
?>
Чтобы запретить распознавание символа как форматирующего, следует экранировать его с помощью обратного слеша. Если экранированный символ также является форматирующей последовательностью, то следует экранировать его повторно.
Пример #2 Экранирование символов в функции date()
Для вывода прошедших и будущих дат удобно использовать функции date() и mktime() .
Пример #3 Пример совместного использования функций date() и mktime()
$tomorrow = mktime ( 0 , 0 , 0 , date ( "m" ) , date ( "d" )+ 1 , date ( "Y" ));
$lastmonth = mktime ( 0 , 0 , 0 , date ( "m" )- 1 , date ( "d" ), date ( "Y" ));
$nextyear = mktime ( 0 , 0 , 0 , date ( "m" ), date ( "d" ), date ( "Y" )+ 1 );
?>?php
Замечание:
Данный способ более надёжен, чем простое вычитание и прибавление секунд к метке времени, поскольку позволяет при необходимости гибко осуществить переход на летнее/зимнее время.
Ещё несколько примеров использования функции date() . Важно отметить, что следует экранировать все символы, которые необходимо оставить без изменений. Это справедливо и для тех символов, которые в текущей версии PHP не распознаются как форматирующие, поскольку это может быть введено в следующих версиях. Для экранировании управляющих последовательностей (например, \n) следует использовать одинарные кавычки.
Пример #4 Форматирование с использованием date()
// Предположим, что текущей датой является 10 марта 2001, 5:16:18 вечера,
// и мы находимся в часовом поясе Mountain Standard Time (MST)
?php
$today = date ( "F j, Y, g:i a" ); // March 10, 2001, 5:16 pm
$today = date ( "m.d.y" ); // 03.10.01
$today = date ( "j, n, Y" ); // 10, 3, 2001
$today = date ( "Ymd" ); // 20010310
$today = date ( 'h-i-s, j-m-y, it is w Day' ); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date ( '\i\t \i\s \t\h\e jS \d\a\y.' ); // it is the 10th day.
$today = date ( "D M j G:i:s T Y" ); // Sat Mar 10 17:16:18 MST 2001
$today = date ( 'H:m:s \m \i\s\ \m\o\n\t\h' ); // 17:03:18 m is month
$today = date ( "H:i:s" ); // 17:16:18
$today = date ( "Y-m-d H:i:s" ); // 2001-03-10 17:16:18 (формат MySQL DATETIME)
?>
Для форматирования дат на других языках вместо функции date() можно использовать метод IntlDateFormatter::format() .
Примечания
Замечание:
Для получения метки времени из строкового представления даты можно воспользоваться функцией strtotime() . Кроме того, некоторые базы данных имеют собственные функции для преобразования внутреннего представления даты в метку времени (например, функция MySQL » UNIX_TIMESTAMP).
Временную метку начала запроса можно получить из поля $_SERVER['REQUEST_TIME'] .
Смотрите также
- DateTimeImmutable::__construct() - Возвращает новый объект DateTimeImmutable
- DateTimeInterface::format() - Возвращает дату, отформатированную согласно переданному формату
- gmdate() - Форматирует дату/время по Гринвичу
- idate() - Преобразует локальное время/дату в целое число
- getdate() - Возвращает информацию о дате/времени
- getlastmod() - Получает время последней модификации страницы
- mktime() - Возвращает метку времени Unix для заданной даты
- IntlDateFormatter::format() - Форматирует значение даты/времени в виде строки
- time() - Возвращает текущую метку системного времени Unix
- Предопределённые константы даты и времени
User Contributed Notes
- Функции даты и времени
- checkdate
- date_add
- date_create_from_format
- date_create_immutable_from_format
- date_create_immutable
- date_create
- date_date_set
- date_default_timezone_get
- date_default_timezone_set
- date_diff
- date_format
- date_get_last_errors
- date_interval_create_from_date_string
- date_interval_format
- date_isodate_set
- date_modify
- date_offset_get
- date_parse_from_format
- date_parse
- date_sub
- date_sun_info
- date_sunrise
- date_sunset
- date_time_set
- date_timestamp_get
- date_timestamp_set
- date_timezone_get
- date_timezone_set
- date
- getdate
- gettimeofday
- gmdate
- gmmktime
- gmstrftime
- idate
- localtime
- microtime
- mktime
- strftime
- strptime
- strtotime
- time
- timezone_abbreviations_list
- timezone_identifiers_list
- timezone_location_get
- timezone_name_from_abbr
- timezone_name_get
- timezone_offset_get
- timezone_open
- timezone_transitions_get
- timezone_version_get