iCalendar Rule Lab
Edit an all-day VEVENT's start date, duration, recurrence rule and exception dates, then compute actual occurrence dates. The supported DATE subset is DAILY/WEEKLY/MONTHLY plus INTERVAL, COUNT or UNTIL, BYDAY and monthly BYMONTHDAY. Unsupported ICS properties are rejected rather than silently discarded. This is calendar interchange work, unlike job cron or business-day counting.
Key features
- Compute actual DATE recurrence starts and exclusive all-day ends
- Apply EXDATE precedence and inspect COUNT/UNTIL boundaries
- Strictly import one all-day VEVENT and export CRLF/folded UTF-8 ICS
- Explicitly reject timed, time-zone, alarm and attendee data
- Preview at most 100 occurrences and signal the 2099 horizon
How to use
- Enter an all-day title, start date and duration, or load the sample.
- Enter a RRULE with COUNT or UNTIL and any exception dates.
- Calculate and review occurrences, exclusions and preview limits.
- Optionally paste one all-day VEVENT ICS file for strict import.
- Copy or download the validated ICS and recheck it in the target calendar.
Use cases
- Exclude one meeting from a twice-weekly series with EXDATE
- See how monthly day 31 skips months without that date
- Inspect and re-export a limited all-day VEVENT ICS file
Frequently asked questions
Does this calculate time zones or DST?
No. Only VALUE=DATE all-day events are supported. Dates have no time, TZID or UTC offset, so no DST wall-time conversion is performed. Timed DTSTART, TZID and VTIMEZONE are rejected.
Which RRULE parts are supported?
DAILY, WEEKLY and MONTHLY; INTERVAL 1–24; COUNT 1–120 or DATE UNTIL; plain BYDAY abbreviations; and monthly BYMONTHDAY. Weeks start Monday. BYSETPOS, ordinal weekdays, YEARLY and sub-day rules are unsupported.
What happens with an infinite recurrence?
Exactly one of COUNT or UNTIL is required; an unbounded RRULE is rejected. Preview stops at 100 shown occurrences or the end of 2099 and signals when it has not shown the full sequence.
How do EXDATE and UNTIL work?
UNTIL is inclusive and DTSTART is the first COUNT occurrence. Recurrence is counted before EXDATE removal, so the visible set may have fewer dates than COUNT. For all-day events DTEND is the exclusive next date.
Can I edit every ICS file?
No. Only one VERSION 2.0 all-day VEVENT with UID, DTSTAMP, SUMMARY, DATE DTSTART/DTEND, a supported RRULE and DATE EXDATE is accepted. Alarms, attendees, location, description and multiple events are rejected to avoid silent data loss.
Does saving ICS send invitations?
No. It only creates or downloads a local file; no email, invitation or sync occurs. Imported UIDs are retained and a fresh UID replaces the sample UID on export.
Privacy
ICS text and schedule calculations stay in the browser. No upload, calendar account connection or invitation sending occurs.
Comments & questions