Работа с датами и временем в PHP: от А до Я — полное руководство

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

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

Начать курс

Работа с датами и временем в PHP: от А до Я

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

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

Базовый набор функций для работы с датами включает time() и date(). Функция time() возвращает текущую метку времени Unix (количество секунд с 1 января 1970 года). Функция date() форматирует эту метку в человекочитаемый вид.

Получение текущей даты и времени

Самый простой способ вывести текущую дату:

<?php
echo date('Y-m-d H:i:s'); // 2025-04-10 15:30:45
?>

Форматирование с помощью date()

Функция date() принимает два параметра: формат и необязательную метку времени. Наиболее популярные символы форматирования:

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

Пример вывода с русским текстом:

<?php
echo 'Сегодня ' . date('d.m.Y') . ' года, время ' . date('H:i');
// Сегодня 10.04.2025 года, время 15:30
?>

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

Для сложных операций рекомендуется использовать класс DateTime. Он интуитивно понятен, поддерживает временные зоны и упрощает манипуляции с датами.

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

Создать объект можно разными способами:

<?php
// Текущая дата и время
$now = new DateTime();
echo $now->format('Y-m-d H:i:s'); // 2025-04-10 15:30:45

// Конкретная дата
$date = new DateTime('2025-12-31 23:59:59');
echo $date->format('d.m.Y'); // 31.12.2025

// С использованием относительного формата
$nextWeek = new DateTime('+1 week');
echo $nextWeek->format('Y-m-d');
?>

Изменение даты: modify()

Метод modify() позволяет легко добавлять или вычитать интервалы:

<?php
$date = new DateTime('2025-04-10');
$date->modify('+10 days');
echo $date->format('d.m.Y'); // 20.04.2025

$date->modify('-1 month');
echo $date->format('d.m.Y'); // 20.03.2025
?>

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

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

Глобальная настройка

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

<?php
date_default_timezone_set('Europe/Moscow');
echo date('H:i'); // Время по Москве
?>

Локальная настройка для DateTime

Каждый объект DateTime может иметь свою временную зону:

<?php
$timezone = new DateTimeZone('Asia/Vladivostok');
$date = new DateTime('now', $timezone);
echo $date->format('H:i'); // Время во Владивостоке

// Смена зоны у существующего объекта
$date->setTimezone(new DateTimeZone('Europe/Moscow'));
echo $date->format('H:i'); // Конвертированное время
?>

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

Класс DateInterval и метод diff() позволяют вычислять разницу между двумя датами.

Вычисление разницы

<?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 дней
?>

Добавление интервала

<?php
$date = new DateTime('2025-04-10');
$interval = new DateInterval('P10D'); // 10 дней
$date->add($interval);
echo $date->format('d.m.Y'); // 20.04.2025

// Вычитание
$date->sub(new DateInterval('P1M')); // минус 1 месяц
echo $date->format('d.m.Y'); // 20.03.2025
?>

Формат DateInterval начинается с буквы P (period): P10D — 10 дней, P1Y2M3DT4H5M6S — 1 год, 2 месяца, 3 дня, 4 часа, 5 минут, 6 секунд.

Практические примеры

Преобразование строки в дату

Функция strtotime() преобразует текстовое описание в метку времени:

<?php
$timestamp = strtotime('next Monday');
echo date('d.m.Y', $timestamp); // Дата следующего понедельника

$timestamp = strtotime('last day of February 2025');
echo date('d.m.Y', $timestamp); // 28.02.2025
?>

Проверка корректности даты

Функция checkdate() проверяет, существует ли дата:

<?php
var_dump(checkdate(2, 29, 2024)); // true (високосный год)
var_dump(checkdate(2, 29, 2025));                

Блоги

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