Laravel Zap logo
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();