Gmstrftime: примеры (PHP)

Функция gmstrftime для работы с датами в UTC
Раздел: Дата и время
gmstrftime(string $format, ?int $timestamp = null): string
Описание функции gmstrftime

Функция gmstrftime форматирует дату и время по Гринвичу (GMT/UTC) в соответствии с установленной локалью. Она применяется для отображения временных меток в форматах, учитывающих языковые и региональные настройки.

Аргументы функции

Функция принимает два параметра:

  1. format - строка формата, содержащая спецификаторы преобразования (начинающиеся с %).
  2. timestamp - необязательный параметр, целочисленная метка времени Unix. По умолчанию используется текущее время.

Спецификаторы формата включают:

  • %a, %A - сокращенное и полное название дня недели.
  • %b, %B - сокращенное и полное название месяца.
  • %d - день месяца (01-31).
  • %H - час в 24-часовом формате (00-23).
  • %I - час в 12-часовом формате (01-12).
  • %m - месяц (01-12).
  • %M - минуты (00-59).
  • %p - обозначение AM/PM.
  • %S - секунды (00-59).
  • %y, %Y - год без века (00-99) и с веком.
  • %Z - временная зона (всегда GMT для gmstrftime).
Примеры применения gmstrftime

Пример с использованием текущего времени:

<?
setlocale(LC_TIME, 'ru_RU.UTF-8');
echo gmstrftime('%d %B %Y, %H:%M');
?>
27 января 2024, 14:30

Пример с заданной меткой времени:

<?
setlocale(LC_TIME, 'ru_RU.UTF-8');
echo gmstrftime('%A, %d %b %Y', 1609459200);
?>
среда, 31 дек 2020

Пример с разными спецификаторами:

<?
setlocale(LC_TIME, 'en_US.UTF-8');
echo gmstrftime('Today is %A, %B %d. Time: %I:%M %p', time());
?>
Today is Thursday, January 27. Time: 02:30 PM
Похожие функции в PHP

Функция strftime выполняет аналогичное форматирование, но использует локальное время сервера, а не GMT. Её применение предпочтительно для отображения времени пользователя в его часовом поясе.

Функции date и DateTime::format предоставляют форматирование без учета локали, но с поддержкой часовых поясов через объект DateTime. Они рекомендуются для новых проектов, так как strftime и gmstrftime устарели в PHP 8.1.

Класс IntlDateFormatter из расширения Intl предлагает наиболее полную интернационализацию работы с датами.

Типичные ошибки

Отсутствие установленной локали приводит к выводу на английском языке или некорректным символам:

<?
// Локаль не установлена
echo gmstrftime('%B');
?>
January

Использование несуществующей метки времени:

<?
echo gmstrftime('%Y', -10000000000);
?>
Возвращает пустую строку или ложное значение

Неправильный спецификатор формата:

<?
echo gmstrftime('%Q'); // Неподдерживаемый спецификатор
?>
%Q
Изменения в PHP 8

Начиная с PHP 8.1.0, функции gmstrftime и strftime считаются устаревшими. Их использование вызывает предупреждение уровня E_DEPRECATED. В будущих версиях PHP эти функции будут удалены.

Рекомендуется переходить на использование класса IntlDateFormatter или методов объекта DateTime с date_format.

Расширенные примеры

Форматирование интернациональных дат с разными локалями:

Пример php
<?
$timestamp = 1674825600;
$locales = ['ru_RU.UTF-8', 'fr_FR.UTF-8', 'ja_JP.UTF-8'];
foreach ($locales as $locale) {
    setlocale(LC_TIME, $locale);
    echo gmstrftime('%A, %d %B %Y', $timestamp), "\n";
}
?>
воскресенье, 27 января 2024
dimanche, 27 janvier 2024
日曜日, 27 1月 2024

Создание пользовательского формата с несколькими спецификаторами:

Пример php
<?
setlocale(LC_TIME, 'de_DE.UTF-8');
echo gmstrftime('Woche %V, Jahr %Y, Tag im Jahr: %j', time());
?>
Woche 04, Jahr 2024, Tag im Jahr: 027

Использование с фиксированной меткой времени для отображения исторических дат:

Пример php
<?
setlocale(LC_TIME, 'en_US.UTF-8');
$apollo11 = -14159040;
echo gmstrftime('Apollo 11 landing: %B %d, %Y at %H:%M:%S UTC', $apollo11);
?>
Apollo 11 landing: July 20, 1969 at 20:17:40 UTC

Комбинирование с другими функциями для вычисления интервалов:

Пример php
<?
setlocale(LC_TIME, 'ru_RU.UTF-8');
$start = time();
$end = $start + 86400 * 7;
echo 'С ', gmstrftime('%d %B', $start), ' по ', gmstrftime('%d %B %Y', $end);
?>
С 27 января по 03 февраля 2024
Аналоги в других языках

Gmstrftime в Python

Модуль time содержит функцию gmtime вместе с strftime:

import time
print(time.strftime('%d %B %Y', time.gmtime()))
27 January 2024

Gmstrftime в Javascript

Метод toUTCString объекта Date или Intl.DateTimeFormat с указанием часового пояса UTC:

console.log(new Date().toUTCString());
// или
console.log(new Intl.DateTimeFormat('en-US', { timeZone: 'UTC', dateStyle: 'full' }).format(new Date()));
Thu, 27 Jan 2024 14:30:00 GMT

Gmstrftime в MySQL

Функция UTC_TIMESTAMP вместе с DATE_FORMAT:

SELECT DATE_FORMAT(UTC_TIMESTAMP(), '%W, %d %M %Y');
Thursday, 27 January 2024

PHP gmstrftime function comments

En
Gmstrftime Format a GMT/UTC time/date according to locale settings