🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
FrozenClock — замороженные часы
Назначение
Детерминизм тестов: время стоит, пока его явно не сдвинут setTo()/modify()/advance()/rewind().
Для чего и как применять
Базовый инструмент юнит-тестов: FrozenClock::from('2026-01-01 00:00:00', 'UTC'); снимок любых часов — $clock->freeze().
Пример
$clock = FrozenClock::from('2026-01-01 00:00:00', 'UTC');
$clock->advance(90.0); // +90 секунд
$clock->modify('+1 day');
$clock->rewind(30.0); // назад на 30 секунд
Анти-паттерны
Не используйте в проде: остановленное время ломает TTL и расписания.
Жизненный цикл
stateDiagram-v2
[*] --> Frozen: from()/fromUtcNow()
Frozen --> Frozen: now() (same moment)
Frozen --> Shifted: advance()/rewind()/modify()/setTo()
Shifted --> Shifted: now() (new fixed moment)
Сравнение возможности с аналогами
| Аспект | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Явные сдвиги вперёд и назад | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Строковые модификаторы (+1 day) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Типизированная ошибка на мусорный ввод | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
Снимок из любых часов (freeze()) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Всего | 🏆 4 | 0 | 2 | 0 | 0 | 0 |
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano