Новое в Symfony 6.4: DatePoint

Источник: «New in Symfony 6.4: DatePoint»
В Symfony 6.4 представлен DatePoint, заменяющий PHP-классы даты/времени, предоставляющий множество утилит, полную интеграцию с компонентом `Clock` и улучшенную обработку ошибок.

Работа с датами в PHP иногда может быть несколько странной. Например, если вы изменяете переменную DateTime для создания новой даты, то исходная переменная также изменяется. Поэтому для решения этой проблемы в PHP был введён класс DateTimeImmutable. К сожалению, этот класс также имеет свои особенности, например, при возникновении ошибки вместо выброса исключений возвращает false.

Именно поэтому в Symfony 6.4 мы представляем DatePoint — новый класс для работы с датами в PHP. Во-первых, этот класс расширяет DateTimeImmutable, поэтому вы можете использовать его везде, где ожидается DateTimeImmutable или DateTimeInterface.

Во-вторых, этот класс легко интегрируется с компонентом Clock, представленным нами в Symfony 6.2. Это означает, что если вы внесли какие-либо изменения в часы, то они будут отражены при создании новых экземпляров DatePoint:

use Symfony\Component\Clock\DatePoint;

// получение текущего времени из даты/времени, определяемой Clock
$createdAt = new DatePoint();

// установка текущего времени в явном виде
$firstPubliCommitOfSymfony = new DatePoint('2005-10-18 16:27:36 Europe/Paris');

// использование текущего времени Clock, но с указанием часового пояса
$orderCreatedAt = new DatePoint(timezone: new \DateTimezone('UTC'));

// использование существующей даты в качестве ссылки для создания DatePoint
$welcomeDiscountValidUntil = new DatePoint('+1 month', reference: $user->getSignedUpAt());

Другое улучшение класса DatePoint заключается в том, что ошибки (например, создание недопустимых дат или попытка модификации недопустимых дат) больше не возвращают false, а выбрасывают \DateMalformedStringException. Это исключение появилось в PHP 8.3, но благодаря полифиллу Symfony PHP 8.3 вы можете использовать его, начиная с PHP 7.1.

В целом, DatePoint является полноценной заменой классов даты/времени PHP, предоставляющей множество утилит, полную интеграцию с компонентом Clock и улучшенную обработку ошибок.

Дополнительные материалы

Предыдущая Статья

Laravel Impersonate — Как выдавать себя за других пользователей

Следующая Статья

О чем нам говорит удаление свойств объектов в JavaScript