Laravel Zap logo
Schedule Patterns

Weekly Odd / Even

weeklyOdd(), weeklyEven(), weekOddDays(), weekEvenDays() — alternating ISO weeks.

Weekly Odd / Even

Schedule only on odd-numbered or even-numbered ISO weeks. Useful for alternating schedules (e.g. shared resources, rotating shifts).

weeklyOdd() and weeklyEven()

// Weekly odd - runs only on odd-numbered ISO weeks
Zap::for($employee)
    ->named('Morning Shift - Odd Weeks')
    ->availability()
    ->weeklyOdd(['monday', 'tuesday', 'wednesday', 'thursday', 'friday'])
    ->addPeriod('05:00', '13:00')
    ->forYear(2025)
    ->save();

// Weekly even - runs only on even-numbered ISO weeks
Zap::for($employee)
    ->named('Afternoon Shift - Even Weeks')
    ->availability()
    ->weeklyEven(['monday', 'tuesday', 'wednesday', 'thursday', 'friday'])
    ->addPeriod('13:00', '21:00')
    ->forYear(2025)
    ->save();

weekOddDays() and weekEvenDays()

Convenience methods that combine odd/even weekly recurrence with a single time period (like weekDays() for regular weekly).

// Using weekOddDays() - combines weeklyOdd() and addPeriod()
Zap::for($employee)
    ->named('Morning Shift - Odd Weeks')
    ->availability()
    ->weekOddDays(['monday', 'tuesday', 'wednesday', 'thursday', 'friday'], '05:00', '13:00')
    ->forYear(2025)
    ->save();

// Using weekEvenDays() - combines weeklyEven() and addPeriod()
Zap::for($employee)
    ->named('Afternoon Shift - Even Weeks')
    ->availability()
    ->weekEvenDays(['monday', 'tuesday', 'wednesday', 'thursday', 'friday'], '13:00', '21:00')
    ->forYear(2025)
    ->save();
Weekly odd/even scheduling uses ISO week numbers. Week 1 is the first week of the year that contains a Thursday. This ensures consistent behavior across different calendar systems.