Глиф Учебники

Как вывести дату в PHP: date и DateTime

Справочник · PHP · 2 минуты чтения

Сначала задайте часовой пояс, потом выводите дату:

PHP
<?php
date_default_timezone_set('Europe/Minsk');
echo date('d.m.Y H:i');

Выведет текущие дату и время вида 05.11.2026 14:30. Без часового пояса PHP считает время по UTC (всемирное время), и часы разойдутся с минскими на 3. Пояс лучше задать один раз для всего сервера строкой date.timezone = Europe/Minsk в php.ini, а в коде вызывать date_default_timezone_set, только если доступа к php.ini нет.

Буквы формата

БукваЧто значитПример
dдень с нулём05
jдень без нуля5
mмесяц с нулём03
nмесяц без нуля3
Yгод, 4 цифры2025
yгод, 2 цифры25
Hчасы 00–2309
iминуты07
sсекунды45
Nдень недели: 1 — понедельник … 7 — воскресенье6
tдней в месяце31

Остальные знаки выводятся как есть: date('Y-m-d H:i:s') — формат для базы данных, date('d.m.Y') — привычный в Беларуси. Буква, которую нужно вывести буквально, экранируется обратной чертой.

DateTimeImmutable

Для расчётов удобнее объекты дат:

PHP
<?php
$start = new DateTimeImmutable('2025-01-01');
$end = new DateTimeImmutable('2025-03-08');
echo $end->format('d.m.Y') . "\n";
echo $start->modify('+1 month')->format('d.m.Y') . "\n";
echo $start->diff($end)->days . "\n";
echo $end->format('N') . "\n";
Вывод
08.03.2025
01.02.2025
66
6

У похожего класса DateTime метод modify меняет сам объект — из-за этого легко испортить дату, которая нужна дальше. Новичкам проще с DateTimeImmutable.

Месяц по-русски

date и format пишут названия месяцев и дней только по-английски (F — March, l — Saturday). Русские названия проще всего взять из своего массива:

PHP
<?php
$months = [1 => 'января', 'февраля', 'марта', 'апреля', 'мая', 'июня',
    'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'];
$date = new DateTimeImmutable('2025-03-08');
echo $date->format('j') . ' ' . $months[(int) $date->format('n')] . ' ' . $date->format('Y') . "\n";
Вывод
8 марта 2025

Запись [1 => 'января', 'февраля', …] начинает нумерацию с единицы: дальше ключи идут 2, 3, 4 и так далее.

Метка времени

time() возвращает текущее время числом — секунды с 1 января 1970 года (UTC). Такое число удобно хранить и сравнивать. strtotime переводит строку в такое число, date — обратно:

PHP
<?php
echo date('d.m.Y', strtotime('2025-03-08 +10 days')) . "\n";
Вывод
18.03.2025

Подводные камни