🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
OffsetClock — часы со смещением
Назначение
Декоратор: «путешествие во времени» относительно внутренних часов на фиксированное смещение (секунды или DateInterval, знак любой).
Для чего и как применять
Стейджинг «в будущем» (тесты акций, сроков), компенсация рассинхрона со внешней системой: OffsetClock::aheadBy($clock, 3600.0).
Пример
$tomorrow = OffsetClock::aheadBy(SystemClock::utc(), 86_400.0);
$yesterday = OffsetClock::behindBy(SystemClock::utc(), new DateInterval('P1D'));
Анти-паттерны
Не для тестового детерминизма — внутри всё ещё живое время; для тестов берите FrozenClock/MockClock.
Жизненный цикл
flowchart LR
A[Inner clock] -->|now()| B[OffsetClock]
B -->|+offset| C[Shifted moment]
C --> D[Consumer]
Сравнение возможности с аналогами
| Аспект | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Смещение декоратором без глобального состояния | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Интервал или секунды, знак любой | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Переопределение таймзоны выдачи | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Композиция с любыми часами пакета | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Всего | 🏆 4 | 0 | 0 | 0 | 0 | 0 |
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano