Операции с датами в PHP. Как сложить или вычесть две даты?

операции с датами в php. как сложить или вычесть две даты?

Проблемы модификации дат

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

Проблемы начинаются, когда вам нужно получить специфичную дату. Например, полдень следующего вторника или последнего дня в феврале текущего года. В PHP присутствует ряд гибких инструментов для решения всего спектра задач по сложению, вычитанию и модификации дат.

Сложение и вычитание дат

Под сложением и вычитанием дат принято понимать изменение какой-либо начальной точки времени на заданный интервал. В PHP для определения этой точки отсчета нужно использовать объект класса DateTime(), который имеет метод sub() для возврата даты в прошлое, а также add() выполняющий обратную по смыслу операцию. Оба метода в качестве параметра используют объект класса DateInterval().

Конструктор класса DateInterval() принимает всего один параметр. Он очень важен для нас, так как с его помощью задается значение, на которую будет изменена дата. Период изменения даты описывается строкой, содержащей специальные указатели. Например, для формирования интервала 2 дня, 3 часа и 48 минут необходимо передать в конструктор DateInterval() строку «P2DT3H48M».

Ниже приводится таблица с описанием всех возможных указателей. Общий смысл заключается в том, что строка всегда должна начинаться с символа «P». Он определяет начало периода времени. Следующее содержимое строки идентифицируется как числа, за которыми идут конкретные указатели. Число говорит о количестве того, что определяется указателем. Например, строка «48M» сообщает о 48 минутах. Если в строке присутствует время: часы, минуты или секунды, перед их определением необходимо поставить указатель «T».

Указатели временных интервалов:

Обозначение Расшифровка
P Начало всего периода
Y Год
M Месяц
D День
T Начало определения времени
H Час
M Минута
S Секунда
//Создаем начальную точку времени
$date = new DateTime("01-03-2018");

//Интервал: 3 дня 10 часов 15 минут
$interval = new DateInterval("P3DT10H15M");

//Увеличиваем дату на заданный интервал
$date->add($interval);
echo $date->format("Y-m-d H:i"); //2018-03-04 10:15

Изменение даты на заданный промежуток

Помимо операций сложения и вычитания в PHP присутствует возможность модификации определенной даты. Для этого у объекта класса DateTime() есть метод modify(), который принимает строку в определенном формате. Особую важность этот метод получает при использовании относительного формата определения времени. Например, строка «next monday» скорректирует дату к следующему понедельнику.

//Создаем начальную точку времени
$date = new DateTime("01-03-2018");

//Модифицируем дату к последнему дню следующего месяца
$date->modify("last day of next month");
echo $date->format("Y-m-d"); //2018-04-30

Заметка
Использование относительного формата указания времени не сложная задача, но описать его полностью не получится в одном уроке. Он обязательно будет рассмотрен в следующих статьях данного учебного курса, но вы можете ознакомиться с ним на странице официальной документации.

Последние публикации