🧱 Суть
В PHP для работы с датой и временем используется класс DateTime.
Он позволяет:
- получать текущую дату и время
- форматировать даты
- изменять значения
- сравнивать даты
- работать с часовыми поясами
Пример:
$date = new DateTime();
echo $date->format('Y-m-d');Результат:
2026-07-17📦 Проблема
1. Ручная работа со строками дат
Например:
$date = "17.07.2026";Такая строка не является полноценной датой, и с ней сложно выполнять операции.
2. Разные форматы даты
Одна и та же дата может выглядеть по-разному:
2026-07-17
17.07.2026
July 17, 2026Без единого подхода возникают ошибки при обмене данными.
3. Проблемы с часовыми поясами
Одинаковое время может означать разные моменты в разных странах.
✅ Решение
Использовать DateTime вместо ручной обработки строк:
- хранить даты в стандартном формате
- явно указывать часовой пояс
- использовать встроенные методы для операций со временем
💻 Код
Создание даты
Текущая дата и время:
$date = new DateTime();С конкретной датой:
$date = new DateTime('2026-07-17');С временем:
$date = new DateTime('2026-07-17 15:30:00');Форматирование даты
Метод format() превращает дату в строку:
$date = new DateTime();
echo $date->format('Y-m-d');Популярные форматы:
| Формат | Значение |
|---|---|
Y | год (4 цифры) |
m | месяц |
d | день |
H | часы |
i | минуты |
s | секунды |
| Пример: |
echo $date->format('d.m.Y H:i');Результат:
17.07.2026 15:30Часовые пояса
Часовой пояс задаётся через DateTimeZone:
$date = new DateTime(
'now',
new DateTimeZone('Europe/Amsterdam')
);Получить текущую временную зону:
echo $date->getTimezone()->getName();Изменение даты
Метод modify() изменяет значение:
$date = new DateTime();
$date->modify('+1 day');Примеры:
$date->modify('+1 month');
$date->modify('-2 hours');Добавление и вычитание времени
Через DateInterval:
$date = new DateTime();
$interval = new DateInterval('P7D');
$date->add($interval);Обозначения:
P– периодD– дниM– месяцыY– годы
Пример:
P7Dозначает:
7 днейСравнение дат
Объекты DateTime можно сравнивать:
$date1 = new DateTime('2026-01-01');
$date2 = new DateTime('2026-12-01');
if ($date1 < $date2) {
echo "Первая дата раньше";
}Разница между датами
Метод diff():
$date1 = new DateTime('2026-01-01');
$date2 = new DateTime('2026-07-01');
$diff = $date1->diff($date2);
echo $diff->days;Результат:
181Создание даты из timestamp
Timestamp – количество секунд с 1 января 1970 года.
Создание:
$date = new DateTime();
echo $date->getTimestamp();Из timestamp:
$date = new DateTime('@1752700000');Статический класс DateTimeImmutable
DateTime изменяет исходный объект:
$date->modify('+1 day');DateTimeImmutable создаёт новый объект:
$date = new DateTimeImmutable();
$newDate = $date->modify('+1 day');Преимущество:
- меньше неожиданных изменений
- безопаснее при передаче между функциями
Частые практики в проектах
Хранить даты в БД:
Обычно используют:
YYYY-MM-DD HH:mm:ssПример:
2026-07-17 15:30:00Хранить время в UTC
Частая практика:
База данных → UTC
↓
Пользовательский часовой пояс
Так проще работать с международными приложениями.
🎯 Вывод
DateTime– основной инструмент работы с датами в PHP- даты лучше хранить как объекты, а не строки
format()используется для выводаmodify()иDateIntervalпозволяют менять дату- часовые пояса нужно задавать явно
DateTimeImmutableпомогает избежать случайных изменений- для серверных приложений часто используют UTC