gmdate()
Функция gmdate() в PHP: форматирование даты и времени в UTC/GMT, синтаксис, параметры, символы формата и примеры.
Введение
Функция gmdate() форматирует Unix-метку времени в удобочитаемую строку даты и времени в GMT/UTC, игнорируя настроенный часовой пояс сервера. Это UTC-аналог функции date(): обе принимают одинаковые символы формата, но gmdate() всегда возвращает время по Гринвичу. Это делает её подходящим инструментом, когда требуется независимое от часового пояса значение — для записи в лог, формирования HTTP-заголовка или хранения нормализованной метки времени, которую любой сервер и клиент интерпретирует одинаково.
В этом руководстве описаны синтаксис, параметры, наиболее распространённые символы формата, отличия gmdate() от date(), а также несколько запускаемых примеров.
Синтаксис
gmdate(string $format, ?int $timestamp = null): stringПараметры
$format(обязательный) — строка из символов формата, которые заменяются соответствующими значениями даты/времени. Любой символ, не распознанный как спецификатор формата, выводится как есть. Чтобы вывести символ буквально, не интерпретируя его, экранируйте его обратным слешем (например,\T).$timestamp(необязательный) — Unix-метка времени (количество секунд, прошедших с 1 января 1970 года, 00:00:00 UTC). Если не указан или равенnull, используется текущее время.
Функция возвращает отформатированную дату/время в виде строки, всегда выраженной в UTC, независимо от date_default_timezone_set() или параметра date.timezone сервера.
Распространённые символы формата
Ниже приведены спецификаторы, которые используются чаще всего. Они идентичны тем, что используются функцией date().
| Символ | Значение | Пример |
|---|---|---|
Y | 4-значный год | 2026 |
m | Месяц, 2 цифры с ведущим нулём | 06 |
d | День месяца, 2 цифры | 04 |
H | Час в 24-часовом формате (00–23) | 05 |
i | Минуты (00–59) | 45 |
s | Секунды (00–59) | 57 |
D | День недели, сокращённый текст | Sun |
M | Месяц, сокращённый текст | Mar |
T | Аббревиатура часового пояса | GMT |
U | Секунды с начала эпохи Unix | 1646372757 |
Примеры
Пример 1: Вывод текущей даты и времени по GMT/UTC
Без аргумента-метки времени gmdate() форматирует текущий момент в UTC.
Пример 2: Форматирование даты и времени с произвольными спецификаторами
Распространённый шаблон — формирование читаемой метки времени в стиле RFC. Поскольку gmdate() работает в UTC, спецификатор T всегда выводит GMT.
Пример 3: Форматирование конкретной метки времени
Передайте Unix-метку времени вторым аргументом, чтобы отформатировать фиксированный момент вместо «сейчас».
gmdate() vs date()
date() форматирует метку времени с использованием локального часового пояса, настроенного для скрипта, тогда как gmdate() всегда форматирует в UTC. При одинаковой метке времени обе функции возвращают одну и ту же строку только тогда, когда локальный часовой пояс совпадает с UTC.
<?php
date_default_timezone_set('America/New_York');
$timestamp = 1646372757;
echo date('Y-m-d H:i:s', $timestamp); // 2022-03-04 00:45:57 (local, UTC-5)
echo "\n";
echo gmdate('Y-m-d H:i:s', $timestamp); // 2022-03-04 05:45:57 (UTC)Используйте gmdate(), когда значение должно быть независимым от часового пояса (логи, HTTP-заголовки Date, ответы API, хранение в базе данных). Используйте date(), когда отображаете время пользователю в его локальном часовом поясе.
Когда использовать gmdate()
- Стандартизированное логирование — храните метки времени в UTC, чтобы записи с серверов в разных регионах оставались сопоставимыми.
- HTTP-заголовки и кэширование — заголовки вроде
ExpiresиLast-Modifiedдолжны быть выражены в GMT. - API и обмен данными — возвращайте UTC, чтобы клиенты могли надёжно конвертировать в любой локальный часовой пояс.
Для полноценной объектно-ориентированной работы с датами и явными преобразованиями часовых поясов предпочтительнее классы DateTime и DateTimeZone. Для построения меток времени, передаваемых в gmdate(), см. gmmktime() (UTC) и mktime() (местное время).
Заключение
Функция gmdate() предоставляет простой способ форматирования дат и времени в UTC, используя те же символы формата, что и date(), но всегда привязанная к GMT. В этом руководстве описаны её синтаксис, параметры, наиболее распространённые символы формата, отличия от date() и практические примеры, которые помогут вам интегрировать её в свои проекты. Подробнее о работе с датами в PHP см. в обзоре PHP Date and Time.