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.
