Работа с датами и временем в PHP: функции и примеры

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение: зачем уметь работать с датами и временем в PHP

Работа с датами и временем — одна из ключевых задач в веб-разработке. Будь то логирование действий пользователя, расчет возраста, создание календарей, обработка временных меток из базы данных или управление сроками подписки — без надежных инструментов для работы с датами не обойтись. PHP предоставляет разработчикам мощный и гибкий набор функций и классов для этих целей.

В этой статье мы подробно разберем основные способы работы с датами и временем в PHP: от простых функций date() и time() до объектно-ориентированного подхода с использованием класса DateTime. Вы узнаете, как форматировать даты, вычислять разницу между ними, работать с временными зонами и избегать типичных ошибок.

Основные функции: date(), time() и mktime()

Самый простой способ получить текущую дату или время в PHP — использовать функцию date(). Она принимает строку формата и опционально метку времени (timestamp). Если метка не передана, используется текущее время.

<?php
// Текущая дата в формате "Год-Месяц-День"
echo date('Y-m-d'); // Вывод: 2025-04-10

// Текущее время в формате "Часы:Минуты:Секунды"
echo date('H:i:s'); // Вывод: 14:35:20

// Полная дата и время
echo date('Y-m-d H:i:s'); // Вывод: 2025-04-10 14:35:20
?>

Функция time()

time() возвращает текущую метку времени Unix (количество секунд, прошедших с 1 января 1970 года). Это полезно для расчетов и сравнений.

<?php
$now = time();
echo $now; // Вывод: 1744277720 (число меняется каждую секунду)

// Дата через 7 дней
$nextWeek = time() + (7 * 24 * 60 * 60);
echo date('Y-m-d', $nextWeek); // Вывод: 2025-04-17
?>

Функция mktime()

mktime() позволяет создать метку времени для конкретной даты и времени. Это удобно, когда нужно получить timestamp для заданных параметров.

<?php
// Создаем метку времени для 25 декабря 2025 года, 10:00:00
$christmas = mktime(10, 0, 0, 12, 25, 2025);
echo date('Y-m-d H:i:s', $christmas); // Вывод: 2025-12-25 10:00:00
?>

Форматирование дат: основные символы

В таблице ниже приведены наиболее часто используемые символы форматирования для функции date():

  • d — день месяца (01–31)
  • m — номер месяца (01–12)
  • Y — год в 4-значном формате (2025)
  • H — часы в 24-часовом формате (00–23)
  • i — минуты (00–59)
  • s — секунды (00–59)
  • l — полное название дня недели (Monday)
  • F — полное название месяца (April)

Объектно-ориентированный подход: класс DateTime

Начиная с PHP 5.2, рекомендуется использовать класс DateTime для работы с датами. Он предоставляет гораздо больше возможностей и интуитивно понятный интерфейс.

Создание объекта DateTime

<?php
// Текущая дата и время
$date = new DateTime();
echo $date->format('Y-m-d H:i:s'); // Вывод: 2025-04-10 14:35:20

// Конкретная дата
$birthday = new DateTime('1990-07-15');
echo $birthday->format('d.m.Y'); // Вывод: 15.07.1990

// С относительным форматом
$nextMonth = new DateTime('+1 month');
echo $nextMonth->format('Y-m-d'); // Вывод: 2025-05-10
?>

Модификация дат

Метод modify() позволяет легко изменять дату с помощью относительных строк.

<?php
$date = new DateTime('2025-04-10');
$date->modify('+10 days');
echo $date->format('Y-m-d'); // Вывод: 2025-04-20

$date->modify('first day of next month');
echo $date->format('Y-m-d'); // Вывод: 2025-05-01
?>

Разница между датами: DateInterval

Для вычисления разницы между двумя датами используется метод diff(), который возвращает объект DateInterval.

<?php
$start = new DateTime('2025-01-01');
$end = new DateTime('2025-12-31');
$interval = $start->diff($end);

echo $interval->days; // Вывод: 364 (количество дней)
echo $interval->format('%m месяцев, %d дней'); // Вывод: 11 месяцев, 30 дней
?>

Работа с временными зонами (Timezones)

Игнорирование временных зон — одна из самых распространенных ошибок при работе с датами. PHP позволяет легко управлять часовыми поясами.

Установка временной зоны по умолчанию

Глобально временную зону можно задать в файле php.ini или с помощью функции date_default_timezone_set().

<?php
// Устанавливаем московское время
date_default_timezone_set('Europe/Moscow');
echo date('Y-m-d H:i:s'); // Время с учетом часового пояса

// Список поддерживаемых зон: https://www.php.net/manual/ru/timezones.php
?>

DateTime и временные зоны

При создании объекта DateTime можно указать временную зону. Также её можно изменить с помощью метода setTimezone().

<?php
// Создаем объект с явным указанием зоны
$date = new DateTime('now', new DateTimeZone('America/New_York'));
echo $date->format('Y-m-d H:i:s'); // Время в Нью-                

Блоги

Рекомендаций по книгам