Date & Time
Generate a Recurring Custom Weekday Schedule (Mon/Wed/Fri & Tue/Thu Cadence)
Compute the exact calendar date of the Nth recurring class, clinic, or delivery session on a custom multi-day weekly pattern such as Monday/Wednesday/Friday using quotient-and-remainder cycle math.
Compute the Nth session date directly via cycle quotient and intra-week offset
Training cohorts, dialysis clinics, and freight routes frequently run on fixed weekday patterns like Monday/Wednesday/Friday (3 sessions per week, offsets {0, +2, +4} days from Monday) or Tuesday/Thursday (2 sessions per week, offsets {0, +2} days from Tuesday).
Instead of generating hundreds of daily rows and filtering out unwanted weekdays, modular arithmetic computes the exact date of session N (1-based) in closed form: first snap any anchor date A to the first valid Monday on or after A via firstMon = A + MOD(1 - WEEKDAY(A, 2), 7), then add INT((N - 1) / 3) * 7 full weeks plus CHOOSE(MOD(N - 1, 3) + 1, 0, 2, 4) intra-week days.
| Session # (N) | Full Weeks INT((N-1)/3) | Slot MOD(N-1,3)+1 | Offset Days | Scheduled Date (Anchor 2026-05-02 Sat) |
|---|---|---|---|---|
| 1 | 0 weeks | Slot 1 (Mon) | +0 | 2026-05-04 (Mon) |
| 2 | 0 weeks | Slot 2 (Wed) | +2 | 2026-05-06 (Wed) |
| 3 | 0 weeks | Slot 3 (Fri) | +4 | 2026-05-08 (Fri) |
| 4 | 1 week (+7d) | Slot 1 (Mon) | +0 | 2026-05-11 (Mon) |
| 6 | 1 week (+7d) | Slot 3 (Fri) | +4 | 2026-05-15 (Fri) |
Nth Mon/Wed/Fri Session Date From Any Start Anchor
Snaps anchor date B2 forward to the first Monday on or after B2, then advances to the Nth (B3) Mon/Wed/Fri session.
=LET(firstMon, B2 + MOD(1 - WEEKDAY(B2, 2), 7), idx, B3 - 1, TEXT(firstMon + INT(idx / 3) * 7 + CHOOSE(MOD(idx, 3) + 1, 0, 2, 4), "yyyy-mm-dd"))Nth Tue/Thu Session Date (2-Day Weekly Cadence)
Snaps anchor date B2 forward to the first Tuesday (ISO weekday 2) on or after B2, then advances across alternating Tue (+0) and Thu (+2) slots.
=LET(firstTue, B2 + MOD(2 - WEEKDAY(B2, 2), 7), idx, B3 - 1, TEXT(firstTue + INT(idx / 2) * 7 + MOD(idx, 2) * 2, "yyyy-mm-dd"))Try the example
Use the original values or change them to test your understanding.