Schedule Patterns
Dynamic Weekly (Every X Weeks)
everyThreeWeeks(), everyFourWeeks(), … everyFiftyTwoWeeks() — every 3 to 52 weeks.
Dynamic Weekly (Every X Weeks)
For intervals of 3 to 52 weeks, use everyThreeWeeks, everyFourWeeks, … through everyFiftyTwoWeeks. These are distinct from weekly() (every week) and biweekly() (every 2 weeks).
Signature
everyXWeeks(array $days, CarbonInterface|string|null $startsOn = null)
- $days: weekday names, e.g.
['monday', 'friday'] - $startsOn: optional anchor date (the week of this date is the first occurrence); if omitted, the schedule’s start date is used
Same builder chain as other recurrences: add ->from(...)->to(...) or ->forYear(...), ->addPeriod(...) as needed, then ->save().
Examples
// Every 3 weeks on Tuesday and Thursday
Zap::for($resource)
->named('Review Sessions')
->availability()
->everyThreeWeeks(['tuesday', 'thursday'])
->from('2025-01-01')
->to('2025-12-31')
->addPeriod('14:00', '16:00')
->save();
// Every 4 weeks with explicit startsOn anchor (first occurrence is the week of 2025-01-06)
Zap::for($resource)
->named('Monthly Sync')
->availability()
->everyFourWeeks(['monday'], '2025-01-06')
->forYear(2025)
->addPeriod('10:00', '11:00')
->save();
// Every 6 weeks on Wednesdays
Zap::for($resource)
->named('Bi-monthly Check-in')
->availability()
->everySixWeeks(['wednesday'])
->forYear(2025)
->addPeriod('09:00', '10:00')
->save();
