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 для всех ваших нужд, связанных с датой и временем.