CloudCastle Clock

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

CalendarPeriod — итерация календарного периода

Назначение

Ленивый период дат с шагом (TimeSpan, DateInterval или строка вида 1 month): генератор отдаёт CalendarDate по одной, не материализуя весь диапазон. Паритет с CarbonPeriod.

Для чего и как применять

Календари, графики платежей, отчёты по дням/неделям/месяцам: CalendarPeriod::between($from, $to, '1 week'), границы — excludingStart()/excludingEnd(), проверка — contains().

Пример

$period = CalendarPeriod::between(
    new DateTimeImmutable('2026-01-01'),
    new DateTimeImmutable('2026-03-01'),
    '1 month',
)->excludingEnd();

foreach ($period as $date) {
    echo $date->format('Y-m-d');   // 2026-01-01, 2026-02-01
}
count($period);                    // 2

Анти-паттерны

Шаг, не продвигающий дату вперёд (ноль или отрицательный), отклоняется типизированным исключением — бесконечный цикл невозможен. Для миллионов точек предпочитайте foreach вместо toArray().

Жизненный цикл

stateDiagram-v2
    [*] --> Configured: between(start, end, step)
    Configured --> Configured: excludingStart() / excludingEnd()
    Configured --> Iterating: foreach / count / toArray
    Iterating --> Iterating: yield CalendarDate, advance(step)
    Iterating --> Failed: step does not progress
    Iterating --> [*]: date passes end

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

Аспект🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
Ленивая итерация генератором✅❌✅❌❌❌
Шаг TimeSpan / DateInterval / строка✅❌✅❌❌❌
Управление включением границ✅❌✅❌❌❌
Защита от непродвигающегося шага✅❌❌❌❌❌
Иммутабельная конфигурация периода✅❌✅❌❌❌
Всего🏆 504000

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


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