Как получить текущую дату и время в PHP: лучшие практики в 2025
Каждый PHP-разработчик, от новичка до сеньора, хотя бы раз задавался вопросом: "How do I get the current date and time in PHP?". Этот запрос на Stack Overflow набрал тысячи просмотров и не теряет актуальности. В 2025 году, когда PHP продолжает уверенно держать позиции в веб-разработке, умение правильно работать с датами и временем — не просто базовая компетенция, а необходимость. Логирование, кэширование, отчёты, работа с API — всё это требует точного времени. В этой статье мы разберём не только классические функции, но и современные лучшие практики, чтобы ваш код был чистым, надёжным и готовым к любым часовым поясам.
Классика: date() и time()
Самый простой и быстрый способ получить текущую дату и время в PHP — функция date(). Она принимает строку формата и возвращает отформатированную дату на основе текущего времени сервера или указанного timestamp.
<?php
echo date('Y-m-d H:i:s'); // 2025-04-10 14:30:00
echo date('d.m.Y'); // 10.04.2025
echo date('r'); // Thu, 10 Apr 2025 14:30:00 +0300
?>
А если нужен только Unix timestamp (количество секунд с 1 января 1970 года)? Используйте time():
<?php
$timestamp = time();
echo $timestamp; // 1744273800 (пример)
echo date('Y-m-d H:i:s', $timestamp);
?>
Важно: date() использует часовой пояс, установленный в php.ini через директиву date.timezone, или заданный функцией date_default_timezone_set(). В 2025 году это всё ещё рабочий вариант для простых скриптов, но для серьёзных проектов есть более гибкие инструменты.
Современный подход: класс DateTime
Начиная с PHP 5.2 (а это было давно), в языке появился объектно-ориентированный способ работы с датами — класс DateTime. Он стал стандартом де-факто для большинства фреймворков и CMS. Почему? Потому что он гибче, читаемее и безопаснее.
<?php
$now = new DateTime();
echo $now->format('Y-m-d H:i:s'); // 2025-04-10 14:30:00
// С указанием часового пояса
$now = new DateTime('now', new DateTimeZone('Europe/Moscow'));
echo $now->format('Y-m-d H:i:s'); // 2025-04-10 14:30:00 (MSK)
?>
DateTime позволяет легко манипулировать датами: прибавлять дни, вычитать месяцы, сравнивать объекты. Например:
<?php
$today = new DateTime();
$nextWeek = (new DateTime())->modify('+7 days');
$diff = $nextWeek->diff($today);
echo $diff->days; // 7
?>
Именно этот подход рекомендуется в лучших практиках PHP 2025 года. Он иммутабелен (если не изменять объект напрямую) и интуитивно понятен.
Иммутабельный вариант: DateTimeImmutable
Если вы работаете в серьёзном проекте, где важна предсказуемость, используйте DateTimeImmutable. В отличие от DateTime, его методы не изменяют исходный объект, а возвращают новый. Это предотвращает случайные мутации состояния.
<?php
$date = new DateTimeImmutable('2025-04-10');
$newDate = $date->modify('+1 month');
echo $date->format('Y-m-d'); // 2025-04-10 (не изменилось)
echo $newDate->format('Y-m-d'); // 2025-05-10
?>
В 2025 году это считается хорошим тоном — используйте DateTimeImmutable везде, где только можно.
Часовые пояса: настройка и конвертация
Ошибка с часовым поясом — одна из самых частых проблем. Представьте: сервер в США, пользователь в России, а вы показываете время по Гринвичу. Классический провал.
Чтобы избежать этого, всегда явно указывайте часовой пояс. Самый надёжный способ — установить его в начале скрипта с помощью date_default_timezone_set():
<?php
date_default_timezone_set('UTC'); // или 'Europe/Moscow', 'Asia/Yekaterinburg'
?>
Для DateTime можно указать пояс прямо в конструкторе или изменить через setTimezone():
<?php
$date = new DateTime('now', new DateTimeZone('America/New_York'));
echo $date->format('Y-m-d H:i:s'); // время Нью-Йорка
$date->setTimezone(new DateTimeZone('Asia/Tokyo'));
echo $date->format('Y-m-d H:i:s'); // теперь Токио
?>
Список популярных часовых поясов для PHP-разработчика:
UTC— универсальное координированное времяEurope/Moscow— Москва (UTC+3)Europe/Kiev— Киев (UTC+2/UTC+3)Asia/Yekaterinburg— Екатеринбург (UTC+5)America/New_York— Нью-Йорк (UTC-5)Asia/Tokyo— Токио (UTC+9)
Форматирование: популярные маски
Формат даты зависит от задачи: база данных любит Y-m-d H:i:s, пользователь — d.m.Y или j F Y. Вот шпаргалка по самым ходовым символам форматирования:
- Y — год (4 цифры), y — год (2 цифры)
- m — месяц (01-12), n — месяц (1-12 без нуля), M — короткое название месяца (Jan, Feb...)
- d — день (01-31), j — день (1-31 без нуля)
- H — часы (00-23), h — часы (01-12), i — минуты (00-59), s — секунды (00-59)
- l — полное название дня недели (Monday, Sunday...)
- r — RFC 2822 формат (Thu, 10 Apr 2025 14:30:00 +0300)
<?php
$now = new DateTime();
echo