Перейти к содержимому

Часовые пояса PHP

Часовой пояс — это регион мира, в котором действует единое стандартное время для юридических, коммерческих и социальных целей. В PHP часовые пояса представлены в виде строк, определяющих географический регион, например, "America/New_York" или "Europe/London".

Функции работы с часовыми поясами в PHP

PHP предоставляет несколько функций для работы с часовыми поясами. Ниже приведены наиболее часто используемые из них:

1. date_default_timezone_set()

Эта функция устанавливает часовой пояс по умолчанию, который используется всеми функциями работы с датой и временем в скрипте. В качестве аргумента она принимает строку с часовым поясом, например, "America/New_York" или "Europe/London".

2. date_default_timezone_get()

Эта функция возвращает часовой пояс по умолчанию, используемый всеми функциями работы с датой и временем в скрипте.

3. timezone_identifiers_list()

Эта функция возвращает индексированный массив, содержащий все определённые идентификаторы часовых поясов.

4. timezone_abbreviations_list()

Эта функция возвращает ассоциативный массив, содержащий сокращения часовых поясов и их смещения относительно UTC. (Примечание: Устарела в PHP 8.1 и удалена в PHP 8.2. Вместо неё используйте DateTimeZone::listIdentifiers() или современные ООП-классы.)

5. timezone_name_from_abbr()

Эта функция возвращает название часового пояса по его сокращению.

6. DateTimeZone::getOffset()

Этот метод возвращает смещение часового пояса относительно UTC для заданного объекта DateTime.

Современный подход: Хотя описанные выше процедурные функции поддерживаются в устаревших версиях PHP, современная разработка на PHP рекомендует использовать классы DateTime и DateTimeZone. Они обеспечивают более чистый объектно-ориентированный дизайн, автоматический учёт перехода на летнее время и являются стандартом для современных PHP-приложений.

Примеры использования

Рассмотрим несколько практических примеров использования функций работы с часовыми поясами в PHP.

Пример 1: Установка часового пояса по умолчанию

Предположим, вы хотите установить часовой пояс по умолчанию равным "America/New_York". Это можно сделать с помощью функции date_default_timezone_set(), как показано ниже:

Установка часового пояса по умолчанию в PHP

php
date_default_timezone_set("America/New_York");

Это устанавливает часовой пояс по умолчанию равным "America/New_York".

Пример 2: Получение часового пояса по умолчанию

Предположим, вы хотите получить текущий часовой пояс по умолчанию. Это можно сделать с помощью функции date_default_timezone_get(). Чтобы гарантировать автономную работу этого примера, сначала установим часовой пояс по умолчанию:

Получение часового пояса по умолчанию

php
<?php

date_default_timezone_set('UTC');
$timezone = date_default_timezone_get();
echo "The default timezone is: " . $timezone;

?>

В результате выведется: "The default timezone is: UTC".

Пример 3: Вывод списка идентификаторов часовых поясов

Предположим, вы хотите вывести список всех определённых идентификаторов часовых поясов. Это можно сделать с помощью функции timezone_identifiers_list():

Вывод списка идентификаторов часовых поясов в PHP

php
<?php

date_default_timezone_set('UTC');
$timezones = timezone_identifiers_list();
foreach ($timezones as $timezone) {
    echo $timezone . "\n";
}

?>

В результате выведется список всех определённых идентификаторов часовых поясов.

Пример 4: Конвертация часовых поясов с помощью современных классов

Для конвертации часовых поясов и автоматического учёта перехода на летнее время используйте классы DateTime и DateTimeZone:

Конвертация часовых поясов в PHP

php
<?php

$dt = new DateTime('2024-01-01 12:00:00', new DateTimeZone('America/New_York'));
$dt->setTimezone(new DateTimeZone('Europe/London'));
echo $dt->format('Y-m-d H:i:s P');

?>

В результате выведётся конвертированное время для Лондона с автоматическим учётом разницы во времени перехода на летнее время.

Заключение

В этой статье мы обсудили часовые пояса в PHP и функции, используемые для работы с ними. Мы объяснили, что такое часовые пояса, и привели примеры как устаревших процедурных функций, так и современных объектно-ориентированных подходов. Используя эти функции в своих PHP-приложениях, вы сможете легко работать с часовыми поясами и гарантировать точность и надёжность расчётов даты и времени.

Практика

Какие выводы можно сделать о работе с часовыми поясами в PHP на основе информации на этом сайте?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.