DatePoint: Новый класс иммутабельной даты/времени для Symfony 6.4
DatePoint
является полноценной заменой классов даты/времени PHP, предоставляющей множество утилит, полную интеграцию с компонентом Clock
и улучшенную обработку ошибок.Что такое DatePoint
DatePoint
— это новый иммутабельный класс даты/времени, появившийся в Symfony 6.4. Он разработан как более надёжная и стабильная альтернатива встроенному в PHP классу DateTime
. DatePoint
обладает рядом преимуществ по сравнению с DateTime
, в том числе:
- Иммутабельный, что делает его более безопасным для использования в многопоточных приложениях.
- Более строгая обработка ошибок, что позволяет избежать непредвиденных ошибок.
- Обеспечивается более согласованный интерфейс для работы с датами и временем.
- Легко интегрируется с компонентом Symfony
Clock
, что упрощает тестирование кода, чувствительного к времени.
Как использовать DatePoint
Для использования DatePoint
достаточно создать новый экземпляр класса, передав в него желаемые дату и время. Можно также создать экземпляр DatePoint
из существующего объекта DateTime
.
// Создание экземпляра DatePoint из строки
$firstPublicCommitOfSymfony = new DatePoint('2005-10-18 16:27:36 Europe/Paris');
// Создание экземпляра DatePoint из текущего времени
$orderCreatedAt = new DatePoint();
// Создание экземпляра DatePoint из существующего объекта DateTime
$welcomeDiscountValidUntil = new DatePoint('+1 month', reference: $user->getSignedUpAt());
Получив экземпляр DatePoint
, вы можете использовать его для выполнения всех тех же операций, что и с объектом DateTime
. Например, можно получить дату, время, часовой пояс и год экземпляра DatePoint
. Можно также складывать, вычитать и сравнивать экземпляры DatePoint
.
Использование DatePoint
с компонентом Symfony Clock
Компонент Symfony Clock
предоставляет возможность имитировать текущее время для тестовых целей. Это может быть полезно для тестирования кода, чувствительного ко времени, например, кода, планирующего выполнение задач или отправку уведомлений.
Для использования DatePoint
с компонентом Clock
достаточно передать экземпляр Clock
в конструктор DatePoint
. Например:
$clock = new Clock('2023-10-31 00:28:05 PST');
$orderCreatedAt = new DatePoint(timezone: new \DateTimeZone('UTC'), clock: $clock);
Этот код создаст экземпляр DatePoint
, представляющий время 2023-10-31 00:28:05 PST
, но в часовом поясе UTC
.
Преимущества использования DatePoint
Использование DatePoint в ваших Symfony приложениях имеет ряд преимуществ:
- Он более надёжен и прочен, чем встроенный класс
DateTime
. - Он имеет более строгую обработку ошибок, что позволяет избежать непредвиденных ошибок.
- Он предоставляет более согласованный интерфейс для работы с датами и временем.
- Он легко интегрируется с компонентом Symfony
Clock
, что упрощает тестирование кода, чувствительного к времени.
Если вы разрабатываете новое приложение Symfony или обновляете существующее приложение до версии Symfony 6.4, я рекомендую рассмотреть возможность использования DatePoint
для всех ваших нужд, связанных с датой и временем.