PixelNW

Original reference guides · Reviewed 8 October 2026

All-day events: the end date is a boundary

Start here when: a two-day event displays as one day, or a holiday appears as a midnight appointment.

An all-day VEVENT uses DATE values. Its DTEND is exclusive, and its type must match DTSTART. RFC 5545, event component.

A two-day example

The fictional “Sample reading weekend” occupies 16 and 17 January 2027:

DTSTART;VALUE=DATE:20270116
DTEND;VALUE=DATE:20270118

Think of the final date as the first day outside the event. Draw three boxes labeled 16, 17, and 18. Shade the first two; place the ending boundary before the third. This makes the intended result easier to inspect than a vague label such as “through Sunday.”

The downloadable all-day example includes the calendar wrapper and identifiers. After importing it into a test calendar, inspect both a month view and event details. Expected result: an all-day item covering two dates. If the detail editor shows an inclusive final day, compare the rendered dates rather than assuming that the UI repeats the file's boundary representation.

Repair checklist

Google's Calendar API likewise models an event's end as exclusive and distinguishes all-day dates from timed date-times. That API documentation helps explain the model; it does not establish that every uploaded ICS file will be normalized identically. Google event fields.

Microsoft's Exchange interoperability notes say an end earlier than the start fails import. They also describe acceptance of equal start/end values, a product behavior you should not use as a portable authoring rule. Those notes cover listed Exchange versions, not a blanket guarantee for every Outlook client. Microsoft DTEND notes.