CloudCastle Clock

🇷🇺 Русский · 🇬🇧 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/]

Сравнение возможности с аналогами

Аспект🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
Момент из глобальных часов✅✅✅❌❌❌
Типизированные ошибки разбора✅✅✅❌❌❌
Полный API DateTimeImmutable✅✅✅❌❌❌
Ноль зависимостей реализации✅❌❌❌❌❌
Всего🏆 433000

← К списку возможностей


🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano