Read the statement by Michael Teeuw here.
Issue with Outlook recurring events
-
Hello all.
I’m having some issues with Outlook calendar events in the default calendar app and I think I have narrowed it down to a daylight savings issue (bug?):
As you can see above, the recurring rule is expiring the evening before the event so these events do not show in my calendar.
I realise this is looking like a Microsoft issue but I wondered if anyone had encountered this before and knows how to fix it?
One thing that appears to work is setting my timezone to UTC then re-saving the event which I guess I can do unless someone has a better idea… Doing this sets the “UNTIL” time to 00:00 on the day of the actual event.
-
@WallysWellies if the event is a full day event(DTSTART:VALUE=DATE) then the rrule until should also only be date
also full day events are considered local timezone only
i dont think the parser (not our code) validates that
oh, then rrule processes it ( also not our code)
we call rrule.between() to get the list of events that match the rule between a year ago and an year forward(by default)
-
@WallysWellies do you have that full VEVENT so i can look at its processing in both places as i work on both
-
@sdetweil Here is a problematic event:
BEGIN:VEVENT DESCRIPTION:\n RRULE:FREQ=YEARLY;UNTIL=20250504T230000Z;INTERVAL=1;BYMONTHDAY=5;BYMONTH=5 UID:040000008200E00074C5B7101A82E00800000000DAEF6ED30D9FDA01000000000000000 010000000D37F812F0777844A93E97B96AD2D278B SUMMARY:Person A's Birthday DTSTART;VALUE=DATE:20250505 DTEND;VALUE=DATE:20250506 CLASS:PUBLIC PRIORITY:5 DTSTAMP:20250428T133000Z TRANSP:TRANSPARENT STATUS:CONFIRMED SEQUENCE:0 LOCATION: X-MICROSOFT-CDO-APPT-SEQUENCE:0 X-MICROSOFT-CDO-BUSYSTATUS:FREE X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY X-MICROSOFT-CDO-ALLDAYEVENT:TRUE X-MICROSOFT-CDO-IMPORTANCE:1 X-MICROSOFT-CDO-INSTTYPE:1 X-MICROSOFT-DONOTFORWARDMEETING:FALSE X-MICROSOFT-DISALLOW-COUNTER:FALSE X-MICROSOFT-REQUESTEDATTENDANCEMODE:DEFAULT X-MICROSOFT-ISRESPONSEREQUESTED:FALSE END:VEVENT
And here is a working event:
BEGIN:VEVENT DESCRIPTION:\n RRULE:FREQ=YEARLY;UNTIL=20250503T000000Z;INTERVAL=1;BYMONTHDAY=3;BYMONTH=5 UID:040000008200E00074C5B7101A82E00800000000591C9B3BAA0EDA01000000000000000 01000000005E6F2F9D20F7947B69F54FBF0794A6D SUMMARY:Person B's Birthday DTSTART;VALUE=DATE:20250503 DTEND;VALUE=DATE:20250504 CLASS:PUBLIC PRIORITY:5 DTSTAMP:20250428T133000Z TRANSP:TRANSPARENT STATUS:CONFIRMED SEQUENCE:0 LOCATION: X-MICROSOFT-CDO-APPT-SEQUENCE:0 X-MICROSOFT-CDO-BUSYSTATUS:FREE X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY X-MICROSOFT-CDO-ALLDAYEVENT:TRUE X-MICROSOFT-CDO-IMPORTANCE:1 X-MICROSOFT-CDO-INSTTYPE:1 X-MICROSOFT-DONOTFORWARDMEETING:FALSE X-MICROSOFT-DISALLOW-COUNTER:FALSE X-MICROSOFT-REQUESTEDATTENDANCEMODE:DEFAULT X-MICROSOFT-ISRESPONSEREQUESTED:FALSE END:VEVENT
Thanks for taking a look.
-
@WallysWellies thanks, forgot to ask what timezone you are in
-
@sdetweil I’m in the UK. Since it’s British summer time I don’t know if that means I’m UTC+1 or something else… GMT, BST… Stupid changing clocks!
-
@WallysWellies this fix sets the rrule:until to start of day+1 day for fullday events (tested in LA, Chicago, London and Sydney timezones)
add three lines
modules/default/calendarcalendarfetcherutils.jsevent.start = rule.options.dtstart; // old code line 294 // insert these three lines if((rule.options.until != undefined) && CalendarFetcherUtils.isFullDayEvent(event)){ Log.debug("fixup rrule until") rule.options.until = new Date(new Date(moment(rule.options.until).startOf("day").add(1,"day")).getTime()) } Log.debug("fix rrule start=", rule.options.dtstart); // old code line 301
-
@sdetweil Thank you - that has fixed my upcoming calendar event 👍
-
@WallysWellies cool, i will submit as a change for next release
-
@WallysWellies you will need to use my upgrade script and reply no to keeping the changed files
see https://github.com/sdetweil/MagicMirror_scriptsnote upgrade is a two part process
test, do nothing (highlight exposed files, if any)
do upgrade