All-day untimed events in RFC 2445 iCalendar

Timely‘s WordPress Calendar plugin doesn’t interoperate well with RFC 2445 iCalendar feeds that contain all-day untimed events specified by both DTSTART and a DURATION:P1D. Instead of interpreting them as a one-day all-day event, it seems to interpret them as a two-day event.

I examined a half-dozen calendar apps to see how they generate these kinds of events and here’s what I found:

Apple Calendar.app (Mac OS X 10.9.2)

BEGIN:VEVENT
DTSTART;VALUE=DATE:20140312
DTEND;VALUE=DATE:20140313
SUMMARY:New Event
END:VEVENT

Google Calendar

BEGIN:VEVENT
DTSTART;VALUE=DATE:20140312
DTEND;VALUE=DATE:20140313
SUMMARY:Untitled event
END:VEVENT

Microsoft Outlook Mac 2011 (version 14.3.9)

BEGIN:VEVENT
DTSTART;TZID="Coordinated Universal Time":20140312T000000
DTEND;TZID="Coordinated Universal Time":20140313T000000
SUMMARY:New Appointment
END:VEVENT

Windows Live Calendar (Outlook.com)

BEGIN:VEVENT
DTSTART;VALUE=DATE:20140312
DTEND;VALUE=DATE:20140313
SUMMARY:Example
END:VEVENT

Yahoo! Calendar

BEGIN:VEVENT
SUMMARY:Example
DTSTART;VALUE=DATE:20140312
DTEND;VALUE=DATE:20140312
END:VEVENT

Hebcal.com

BEGIN:VEVENT
SUMMARY:Purim
DTSTART;VALUE=DATE:20140316
DURATION:P1D
END:VEVENT

AddThisEvent.com

BEGIN:VEVENT
DTSTART:20140312
DTEND:20140313
SUMMARY:Example
END:VEVENT

Since the overwhelming majority seem to use both DTSTART + DTEND, I may change Hebcal’s feeds to follow suit. I’ll need to do some interop testing with older versions of Microsoft Outlook for Windows first.