Работа с датой и временем в PHP
PHP предоставляет мощные инструменты для работы с датой и временем. Узнайте о date_add(), DateTime::add() и других функциях.
PHP — популярный серверный язык программирования, широко используемый для создания динамических веб-страниц. Одной из важнейших возможностей PHP является работа с датой и временем. В этой статье мы рассмотрим различные функции для работы с датой и временем, доступные в PHP, и то, как они помогают упростить написание кода.
Понимание даты и времени в PHP
Прежде чем перейти к рассмотрению функций PHP для работы с датой и временем, давайте разберёмся, как PHP обрабатывает даты и время. В PHP даты и время представлены в виде строк. Наиболее распространённый формат записи даты — YYYY-MM-DD, а времени — HH:MM:SS.
PHP также предоставляет встроенную функцию date(), которую можно использовать для форматирования дат и времени в различных форматах. Функция date() принимает два аргумента: строку формата и временную метку. Строка формата задаёт желаемый формат вывода даты и времени, а временная метка указывает, какой момент времени нужно отформатировать.
Добавление времени к датам в PHP
Функция date() используется главным образом для форматирования временных меток в читаемые строки. Для прибавления или вычитания временных интервалов к дате PHP предоставляет класс DateTime с методом add(). Процедурная функция date_add() (от которой получила название эта глава) является устаревшим псевдонимом для DateTime::add(), однако рекомендуется использовать объектно-ориентированный подход.
Вот пример добавления одного дня к заданной дате с помощью DateTime::add():
В этом примере мы создаём object DateTime из исходной строки с датой. Затем используем метод add() с object DateInterval (P1D означает период в 1 день) для изменения даты. В конце форматируем и выводим обновлённую дату.
Понимание формата DateInterval
Строка, передаваемая в DateInterval, соответствует формату длительности ISO 8601. Она всегда начинается с буквы P (от слова «period» — период). Сначала идут части, относящиеся к дате, затем необязательный разделитель T вводит части, относящиеся к времени:
| Код | Значение |
|---|---|
Y | годы |
M | месяцы (до T) |
D | дни |
T | разделитель перед частями времени |
H | часы |
M | минуты (после T) |
S | секунды |
Таким образом, P1Y2M10DT2H30M означает «1 год, 2 месяца, 10 дней, 2 часа и 30 минут». Обратите внимание, что M означает месяцы до T и минуты после него — это частый источник ошибок.
<?php
$date = new DateTime('2022-01-01 00:00:00');
$date->add(new DateInterval('P1Y2M10DT2H30M'));
echo $date->format('Y-m-d H:i:s');
?>add() изменяет исходный object
DateTime::add() изменяет object на месте, не возвращая новый. Если нужно сохранить исходную дату, используйте DateTimeImmutable — он возвращает новый object при каждой операции:
<?php
$start = new DateTimeImmutable('2022-03-02');
$next = $start->add(new DateInterval('P1D'));
echo $start->format('Y-m-d'), "\n"; // unchanged
echo $next->format('Y-m-d'), "\n"; // one day later
?>Вычитание времени из дат
Чтобы сдвинуть дату назад, используйте метод DateTime::sub() с DateInterval. Он работает точно так же, как add(), но в обратном направлении:
<?php
$date = new DateTime('2022-03-02');
$date->sub(new DateInterval('P1M')); // subtract one month
echo $date->format('Y-m-d');
?>Измерение разницы между датами
Чтобы узнать, насколько далеко отстоят две даты друг от друга, используйте DateTime::diff() (процедурный псевдоним date_diff()). Метод возвращает DateInterval, который можно отформатировать:
<?php
$a = new DateTime('2022-01-01');
$b = new DateTime('2022-03-02');
$diff = $a->diff($b);
echo $diff->format('%a days'); // total days between the two dates
?>Другие функции для работы с датой и временем в PHP
Помимо DateTime::add(), PHP предоставляет ряд других функций для работы с датами и временем. Среди них:
strtotime(): Разбирает текстовое описание даты и времени на английском языке и возвращает Unix-временную меткуtime(): Возвращает текущую Unix-временную меткуmktime(): Возвращает Unix-временную метку для заданной даты и времениdate_modify(): Изменяет objectDateTimeс использованием текстового относительного формата (например,+1 day)date_sub(): Устаревший процедурный псевдоним дляDateTime::sub()date_diff(): Вычисляет разницу между двумя объектамиDateTime
Использование этих функций совместно с методами DateTime поможет вам эффективно выполнять разнообразные операции с датой и временем.
Заключение
В этой статье мы рассмотрели, как работать с датами и временем в PHP. Мы уточнили, что функция date() используется для форматирования, тогда как для прибавления или вычитания времени лучше всего использовать метод DateTime::add(). Мы также рассмотрели другие полезные функции, такие как strtotime(), mktime() и date_diff(), и отметили, что date_add() является устаревшим процедурным псевдонимом. Правильное использование этих инструментов поможет вам надёжно управлять операциями с датой и временем в ваших PHP-приложениях.