Gmdate: примеры (PHP)
gmdate(string $format, ?int $timestamp = null): stringФункция gmdate
Функция gmdate в PHP форматирует временную метку Unix в строку даты/времени в соответствии с указанным форматом. Она работает идентично функции date(), но возвращает время по Гринвичу (GMT/UTC), а не локальное время сервера.
- format (обязательный, строка) - Строка формата, определяющая, как будет представлена дата и время. Использует те же спецификаторы, что и
date()(например, 'Y-m-d H:i:s'). - timestamp (необязательный, int) - Временная метка Unix. Если аргумент не указан или равен
null, используется текущее время (time()). В PHP 8.0 поведение приnullизменилось - теперь используется текущее время, а не ошибка.
Простые примеры
Получение текущей даты и времени по UTC.
<?
echo gmdate('Y-m-d H:i:s');
?>2023-10-27 14:30:15
<?
$timestamp = 1698417000;
echo gmdate('l, F j, Y, g:i a', $timestamp);
?>Thursday, October 27, 2023, 2:30 pm
<?
echo gmdate('D, d M y H:i:s T') . "\n";
echo gmdate('c') . "\n"; // ISO 8601
echo gmdate('r'); // RFC 2822
?>Thu, 27 Oct 23 14:30:15 GMT 2023-10-27T14:30:15+00:00 Thu, 27 Oct 2023 14:30:15 +0000
Похожие функции в PHP
Функция date() идентична по синтаксису, но возвращает время в локальной временной зоне сервера. Предпочтительна для отображения времени пользователю в его локальном контексте.
Возвращает целое число для одного поля даты/времени. Более эффективна, когда требуется только один компонент.
Объектно-ориентированный подход с классом DateTimeImmutable и методом format() предоставляет более гибкое и безопасное управление датами и временем, включая работу с часовыми поясами.
<?
$date = new DateTimeImmutable('now', new DateTimeZone('UTC'));
echo $date->format('Y-m-d H:i:s');
?>2023-10-27 14:30:15
Типичные ошибки
Ожидание локального времени при использовании gmdate.
<?
date_default_timezone_set('Europe/Moscow');
echo 'Local: ' . date('H:i') . "\n";
echo 'UTC: ' . gmdate('H:i') . "\n";
?>Local: 17:30 UTC: 14:30
Функция gmdate не поддерживает микросекунды. Для них необходимо использовать DateTime.
<?
// Не работает
echo gmdate('u');
?>000000
Спецификатор 'e' (временная зона) всегда возвращает 'UTC' или 'GMT'.
<?
echo gmdate('e');
?>UTC
Изменения в PHP
Параметр timestamp теперь принимает значение null, что приводит к использованию текущего времени. Ранее это вызывало предупреждение.
<?
// Работает без ошибок в PHP >= 8.0
echo gmdate('Y', null);
?>2023
Были добавлены константы для форматов RFC 7231 (DATE_RFC7231) и ISO 8601 с миллисекундами (DATE_ISO8601_EXPANDED).
Расширенные примеры
Создание меток времени для оси X графика с интервалом в час.
<?
$start = 1698417000; // Начальная метка
for ($i = 0; $i < 24; $i++) {
echo gmdate('H:00', $start + ($i * 3600)) . "\n";
}
?>14:00 15:00 ... 13:00
HTTP-заголовки, такие как Last-Modified, требуют формата RFC 1123.
<?
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $filemtime) . ' GMT');
?>Вывод одного момента времени в разных зонах.
<?
$ts = time();
echo 'UTC: ' . gmdate('Y-m-d H:i:s', $ts) . "\n";
echo 'Local: ' . date('Y-m-d H:i:s', $ts) . "\n";
echo 'New York: ' . date('Y-m-d H:i:s', $ts - 5*3600) . "\n"; // Упрощенно
?>UTC: 2023-10-27 14:30:15 Local: 2023-10-27 17:30:15 New York: 2023-10-27 09:30:15
<?
echo 'Текущая неделя года по UTC: ' . gmdate('W');
?>Текущая неделя года по UTC: 43
<?
$jd = gregoriantojd((int)gmdate('m'), (int)gmdate('d'), (int)gmdate('Y'));
echo 'Юлианский день: ' . $jd;
?>Юлианский день: 2460252
Аналоги в других языках
from datetime import datetime
print(datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S'))2023-10-27 14:30:15
const now = new Date();
console.log(now.toUTCString());
// Или с Intl.DateTimeFormat
console.log(new Intl.DateTimeFormat('en-GB', { timeZone: 'UTC' }).format(now));Thu, 27 Oct 2023 14:30:15 GMT 27/10/2023
SELECT UTC_TIMESTAMP, DATE_FORMAT(UTC_TIMESTAMP, '%Y-%m-%d %H:%i:%s');2023-10-27 14:30:15 | 2023-10-27 14:30:15