From e46377f4611d67bd6d73d3dc78fc1dc8bc8eb364 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 12 Feb 2025 07:38:36 -0800 Subject: [PATCH] Enhancement: better tz parsing of ical recurring events (#4749) --- src/widgets/calendar/integrations/ical.jsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/widgets/calendar/integrations/ical.jsx b/src/widgets/calendar/integrations/ical.jsx index 059adfa2e..6c66f80e6 100644 --- a/src/widgets/calendar/integrations/ical.jsx +++ b/src/widgets/calendar/integrations/ical.jsx @@ -78,7 +78,16 @@ export default function Integration({ config, params, setEvents, hideErrors, tim const rule = new RRule(recurrenceOptions); const recurringEvents = rule.between(startDate.toJSDate(), endDate.toJSDate()); - recurringEvents.forEach((date, i) => eventToAdd(date, i, "recurring")); + recurringEvents.forEach((date, i) => { + let eventDate = date; + if (event.dtstart?.params?.tzid) { + // date is in UTC but parsed as if it is in current timezone, so we need to adjust it + const dateInUTC = DateTime.fromJSDate(date).setZone("UTC"); + const offset = dateInUTC.offset - DateTime.fromJSDate(date, { zone: event.dtstart.params.tzid }).offset; + eventDate = dateInUTC.plus({ minutes: offset }).toJSDate(); + } + eventToAdd(eventDate, i, "recurring"); + }); return; } catch (e) { // eslint-disable-next-line no-console