PHP:
Расчет даты в будущем или прошлом
Как:
PHP упрощает работу с датами с помощью DateTime
и DateInterval
. Посмотрите:
<?php
// Сегодняшняя дата
$today = new DateTime();
echo $today->format('Y-m-d H:i:s') . "\n";
// Добавить 10 дней
$today->add(new DateInterval('P10D'));
echo $today->format('Y-m-d H:i:s') . "\n";
// Вычесть 2 месяца
$today->sub(new DateInterval('P2M'));
echo $today->format('Y-m-d H:i:s') . "\n";
?>
Вывод может быть таким:
2023-04-01 12:34:56
2023-04-11 12:34:56
2023-02-11 12:34:56
Глубже
В прошлом расчёты дат в PHP были более подвержены ошибкам. strtotime
, хотя и по-прежнему полезен, может подвести в крайних случаях. DateTime
и DateInterval
принесли точность и ясность, ориентированную на объекты.
Альтернативы? Конечно. Библиотеки вроде Carbon оборачивают функциональность дат в PHP для большей читабельности и функционала, но во многих случаях встроенных классов PHP будет вполне достаточно.
Под капотом, DateTime::add()
и DateTime::sub()
изменяют объект, так что нет необходимости в повторном присвоении. Они обрабатывают временные единицы последовательно, учитывая такие вещи, как високосные года и изменения времени из-за перехода на летнее/зимнее время, что в противном случае могло бы быть настоящей головной болью.
Смотрите также
- Руководство PHP по DateTime: https://www.php.net/manual/en/class.datetime.php
- Документация DateInterval: https://www.php.net/manual/en/class.dateinterval.php
- Carbon: Простое API-расширение для DateTime - https://carbon.nesbot.com