🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
DatePoint — момент от часов приложения
Назначение
Наследник DateTimeImmutable: new DatePoint() берёт «сейчас» из глобальных часов (ClockHolder), ошибки разбора — типизированные исключения вместо false с warning-ом.
Для чего и как применять
Замена new DateTimeImmutable() в коде, который должен быть тестируемым: моменты автоматически подчиняются подменённым часам.
Пример
ClockHolder::set(MockClock::from('2026-01-01 00:00:00', 'UTC'));
$point = new DatePoint(); // 2026-01-01 из мок-часов
$later = new DatePoint('+1 hour');
DatePoint::createFromFormat('Y-m-d', 'мусор'); // типизированное исключение
Анти-паттерны
В сервисах с DI предпочтительнее явный ClockInterface; DatePoint — мост для кода без внедрения.
Жизненный цикл
flowchart LR
A[ClockHolder] -->|now| B[new DatePoint]
B --> C[DateTimeImmutable API]
B -->|modify/createFromFormat errors| D[/InvalidClockValueException/]
Сравнение возможности с аналогами
| Аспект | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Момент из глобальных часов | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Типизированные ошибки разбора | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
Полный API DateTimeImmutable | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Ноль зависимостей реализации | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Всего | 🏆 4 | 3 | 3 | 0 | 0 | 0 |
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano