All articles

Last weekday of the month or the 31st? Check the recurrence rule

The 31st, the last calendar day and the last Monday–Friday date are different recurrence requests. An RFC 5545 rule targeting day 31 skips months without it. A weekday-only rule excludes weekends, but does not know your public holidays.

Verified 2026 Monthly Resolution Table: BYMONTHDAY=31 vs BYMONTHDAY=-1 vs BYDAY=-1FR vs Last Mon–Fri Date (BYSETPOS=-1)

2026 Month (Length)BYMONTHDAY=31 (Fixed 31st)BYMONTHDAY=-1 (Last Calendar Day)BYDAY=-1FR (Last Friday)BYDAY=MO..FR;BYSETPOS=-1 (Last Mon–Fri Date)
January 2026 (31d)Sat Jan 31Sat Jan 31 (Weekend)Fri Jan 30Fri Jan 30 (Steps back from Sat 31)
February 2026 (28d)SKIPPED (No Feb 31)Sat Feb 28 (Weekend)Fri Feb 27Fri Feb 27 (Steps back from Sat 28)
March 2026 (31d)Tue Mar 31Tue Mar 31Fri Mar 27Tue Mar 31
April 2026 (30d)SKIPPED (No Apr 31)Thu Apr 30Fri Apr 24Thu Apr 30
May 2026 (31d)Sun May 31Sun May 31 (Weekend)Fri May 29Fri May 29 (Steps back from Sun 31)
June 2026 (30d)SKIPPED (No Jun 31)Tue Jun 30Fri Jun 26Tue Jun 30
July & August 2026 (31d)Fri Jul 31 & Mon Aug 31Fri Jul 31 & Mon Aug 31Fri Jul 31 & Fri Aug 28Fri Jul 31 & Mon Aug 31
September 2026 (30d)SKIPPED (No Sep 31)Wed Sep 30Fri Sep 25Wed Sep 30
October 2026 (31d)Sat Oct 31Sat Oct 31 (Weekend)Fri Oct 30Fri Oct 30 (Steps back from Sat 31)
November & December 2026 (30d / 31d)Nov: SKIPPED | Dec: Thu Dec 31Mon Nov 30 & Thu Dec 31Fri Nov 27 & Fri Dec 25Mon Nov 30 & Thu Dec 31

Invalid dates are skipped, not rolled back

RFC 5545 section 3.3.10 says recurrence instances with invalid dates are ignored and not counted. FREQ=MONTHLY;BYMONTHDAY=31 therefore produces seven dates in a full 2026 year: January, March, May, July, August, October and December 31.

Do not confuse that rule with BYMONTHDAY=-1, which selects the final date of every month. If expressing an all-day start in an ICS file, use DTSTART;VALUE=DATE:20260131 rather than an eight-digit value with the default DATE-TIME type.

Four patterns answer four different questions

FREQ=MONTHLY;BYMONTHDAY=31 selects the 31st where it exists. FREQ=MONTHLY;BYMONTHDAY=-1 selects the last calendar date. FREQ=MONTHLY;BYDAY=-1FR selects the last Friday.

FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1 selects the final Monday–Friday date from that month’s weekday set. It does not exclude a public holiday or a personal day off. Do not present it as a universal last business-day rule.

Read the calculated 2026 dates before choosing

The table is calculated from Gregorian month lengths and weekdays. Four 2026 month ends fall on weekends: January 31, February 28, May 31 and October 31. The final Monday–Friday date moves back in those months.

In March, the last Friday is March 27, but the final Monday–Friday date is Tuesday March 31. That difference matters when the requirement is truly the final weekday rather than a Friday meeting.

Check the editor and save a disposable example

Apple’s Mac guide documents Custom repeat, Frequency and an On the pattern, including the last weekday of a month. Microsoft’s cited guide documents monthly specific-day and ordinal-weekday examples. Google’s guide documents choosing a repeat frequency and end, without listing every raw RRULE its editor or importer preserves.

Use the options actually present in the app, then inspect the next several saved dates. A standard’s ability to express a rule is not proof that every app exposes, imports or preserves it unchanged. Use a disposable calendar before relying on a complex imported rule.

What it looks like

  • Week calendar with color-coded appointments
  • Weather view with hourly and daily forecasts

Cloud Calendars overview, using our product images. Provider settings and protocol examples described in this guide are separate from the screens shown here.

What to do

  1. Write whether the requirement means last date, last Friday or last Monday–Friday date.
  2. Check a short month and a weekend month end.
  3. Apply a separately confirmed holiday policy if needed.
  4. Verify saved occurrences in the source account and recipient app.

Questions

Does the final weekday rule avoid holidays?
No. MO,TU,WE,TH,FR excludes Saturdays and Sundays only. A holiday on a weekday still matches unless handled separately.
Why is a monthly-on-31 rule missing in April?
April has no 31st. RFC 5545 ignores that invalid recurrence date rather than moving it to April 30.

Primary specifications and official documentation

Related