🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
StepClock — шаговые часы
Назначение
Каждый вызов now() сдвигает время на фиксированный шаг: детерминированная последовательность моментов без ручных advance().
Для чего и как применять
Генерация серий событий в тестах: временные метки записей, интервалы поллинга. peek()/timestamp() подсматривают без сдвига.
Пример
$clock = StepClock::from('2026-01-01 00:00:00', TimeSpan::ofSeconds(10), 'UTC');
$clock->now(); // 00:00:00
$clock->now(); // 00:00:10
$clock->peek(); // 00:00:20 — без продвижения
Анти-паттерны
Помните: продвигает только now(); для «остановки» используйте нулевой шаг.
Жизненный цикл
stateDiagram-v2
[*] --> S0: from(start, step)
S0 --> S1: now() → start
S1 --> S2: now() → start+step
S2 --> S3: now() → start+2·step
S1 --> S1: peek()/timestamp() (no advance)
Сравнение возможности с аналогами
| Аспект | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
Автошаг при каждом now() | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
peek() без продвижения | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Отрицательный/нулевой шаг | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Шаг как TimeSpan с нс-точностью | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Всего | 🏆 4 | 0 | 0 | 0 | 0 | 0 |
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano