gmstrftime()
Что такое функция gmstrftime() в PHP? gmstrftime() форматирует дату и время в часовом поясе UTC/GMT. Узнайте о замене на gmdate() и IntlDateFormatter.
Что такое функция gmstrftime() в PHP?
Функция gmstrftime() форматировала дату и время в виде строки в часовом поясе UTC/GMT, используя %-спецификаторы в стиле strftime(), текст которых мог быть локализован через текущую локаль (заданную с помощью setlocale()). Она работала точно так же, как strftime(), с той разницей, что вывод всегда производился в GMT, а не в местном времени сервера.
Важно:
gmstrftime()была устаревшей начиная с PHP 8.1 и удалена в PHP 8.2. В современном PHP она больше не существует, поэтому в новом коде необходимо использовать замену. Остальная часть этой страницы описывает функцию для справки и показывает эквиваленты, которые следует использовать сегодня:gmdate()для фиксированных форматов иIntlDateFormatterдля вывода с учётом локали.
На этой странице описаны оригинальная сигнатура и спецификаторы формата, современная замена gmdate(), способ сопоставления старых %-спецификаторов с новыми символами формата, а также правильный способ получения локализованных названий месяцев и дней недели.
Синтаксис
string gmstrftime(string $format, ?int $timestamp = null)$format— строка из%-спецификаторов, описывающих желаемый вывод.$timestamp— необязательный Unix-временн́ой штамп. Если опущен, используется текущее время.
Часто используемые спецификаторы: %Y (4-значный год), %m (месяц, 01–12), %d (день, 01–31), %H (24-часовой формат, 00–23), %M (минуты), %S (секунды), %B (полное название месяца), %A (полное название дня недели).
Современная замена: gmdate()
Поскольку gmstrftime() больше не существует, прямой заменой для фиксированных машинных форматов является gmdate(). Она также выводит время в UTC, но использует символы формата в стиле date() (без %):
Это выводит текущую дату и время UTC в формате YYYY-MM-DD HH:MM:SS, например 2026-06-21 08:04:38.
Сопоставление старых спецификаторов с gmdate()
| Значение | gmstrftime() | gmdate() |
|---|---|---|
| 4-значный год | %Y | Y |
Месяц (01–12) | %m | m |
День (01–31) | %d | d |
Час (00–23) | %H | H |
| Минута | %M | i |
| Секунда | %S | s |
| Полное название месяца | %B | F |
| Полное название дня недели | %A | l |
Таким образом, gmstrftime("%A, %d %B %Y") становится gmdate("l, d F Y").
Форматирование UTC с учётом локали
Единственное, чего не делает gmdate() — это перевод названий месяцев и дней недели на текущую локаль: gmdate() всегда возвращает названия на английском языке. Если вы полагались на gmstrftime() совместно с setlocale() для переведённого вывода (например, названий месяцев на французском), используйте вместо этого IntlDateFormatter из расширения intl:
<?php
$formatter = new IntlDateFormatter(
'fr_FR',
IntlDateFormatter::FULL,
IntlDateFormatter::NONE,
'UTC'
);
echo $formatter->format(time());
?>Это выводит полную дату с французскими названиями месяца и дня недели в UTC — современный, безопасный с точки зрения локали эквивалент старого паттерна setlocale() + gmstrftime().
Почему важно форматирование в UTC
Форматирование в UTC (что делали gmstrftime() и теперь gmdate()) полезно всякий раз, когда вы храните или сравниваете временн́ые штампы независимо от часового пояса пользователя. Логирование, ответы API, значения в базе данных и межрегиональное планирование — всё это выигрывает от единой однозначной точки отсчёта. Перевод в местный часовой пояс выполняется только в момент отображения — как правило, с помощью классов DateTime / DateTimeZone.
Заключение
gmstrftime() предоставляла быстрый способ форматирования даты и времени UTC с помощью %-спецификаторов в стиле strftime(), однако была удалена в PHP 8.2. Для фиксированных форматов замените её на gmdate(), используя приведённую выше таблицу для перевода спецификаторов; для перевода названий месяцев и дней недели используйте IntlDateFormatter. Для знакомства со связанными функциями см. strftime(), gmmktime() и общее руководство по дате и времени в PHP.