Laravel Zap logo
Schedule Patterns

Monthly Ordinal Weekday

First, second, third, fourth, or last weekday of the month — firstWednesdayOfMonth(), lastMondayOfMonth(), etc.

Monthly Ordinal Weekday

Recurring schedules can be defined by which weekday of the month (1st, 2nd, 3rd, 4th, or last), not only by day-of-month numbers. This is useful for meetings like “every first Wednesday” or “every last Monday.”

API

Use fluent methods on the schedule builder. Ordinals: firstXOfMonth(), secondXOfMonth(), thirdXOfMonth(), fourthXOfMonth(), lastXOfMonth(). Replace X with any weekday: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

That gives 35 method names (5 ordinals × 7 days). Examples: firstWednesdayOfMonth(), secondFridayOfMonth(), lastMondayOfMonth().

Examples

// Every 1st Wednesday of the month
Zap::for($resource)->firstWednesdayOfMonth()->forYear(2025)->addPeriod('09:00', '10:00')->save();

// Every 2nd Friday of the month
Zap::for($resource)->secondFridayOfMonth()->forYear(2025)->addPeriod('14:00', '15:00')->save();

// Every last Monday of the month
Zap::for($resource)->lastMondayOfMonth()->forYear(2025)->addPeriod('16:00', '17:00')->save();

With a full chain (e.g. availability or appointment):

// Monthly standup — 1st Wednesday
Zap::for($room)
    ->named('Monthly Standup')
    ->appointment()
    ->firstWednesdayOfMonth()
    ->forYear(2025)
    ->addPeriod('09:00', '10:00')
    ->save();

// Month-end retro — last Monday
Zap::for($room)
    ->named('Month-End Retro')
    ->appointment()
    ->lastMondayOfMonth()
    ->forYear(2025)
    ->addPeriod('16:00', '17:00')
    ->save();

// Bi-weekly-style meeting — 2nd Friday
Zap::for($resource)
    ->named('Bi-Monthly Review')
    ->appointment()
    ->secondFridayOfMonth()
    ->forYear(2025)
    ->addPeriod('14:00', '15:00')
    ->save();

Use cases

Use caseExample
Monthly standup1st Wednesday of the month
Month-end review / retroLast Monday or last Friday
Recurring review (bi-monthly style)2nd Friday of the month
Board meeting3rd Tuesday of the month
Weekly-style but once per month4th Thursday of the month

Technical detail (reference)

  • Stored as frequency monthly_ordinal_weekday with config: ordinal (1–5, 5 = last) and day_of_week (0–6).
  • Works with conflict detection, bookable slots, and schedule queries like other recurring patterns.

For monthly by day-of-month (e.g. 1st and 15th), see Monthly, Bimonthly & Quarterly. For every N months, see Dynamic monthly.