From 944ff68463152795482a1db11f4000fdacf34025 Mon Sep 17 00:00:00 2001 From: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com> Date: Thu, 23 Feb 2023 19:18:49 -0500 Subject: [PATCH] Fix Outlook & Zoom creating events in UTC (#7283) * Apply utc offset to time strings * Zoom, create events in proper time zone --- packages/app-store/office365calendar/lib/CalendarService.ts | 6 ++++-- packages/app-store/zoomvideo/lib/VideoApiAdapter.ts | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/app-store/office365calendar/lib/CalendarService.ts b/packages/app-store/office365calendar/lib/CalendarService.ts index ebc0bf5346..0d5755c434 100644 --- a/packages/app-store/office365calendar/lib/CalendarService.ts +++ b/packages/app-store/office365calendar/lib/CalendarService.ts @@ -1,5 +1,6 @@ import type { Calendar as OfficeCalendar, User } from "@microsoft/microsoft-graph-types-beta"; +import dayjs from "@calcom/dayjs"; import { getLocation, getRichDescription } from "@calcom/lib/CalEventParser"; import { handleErrorsJson, handleErrorsRaw } from "@calcom/lib/errors"; import logger from "@calcom/lib/logger"; @@ -239,6 +240,7 @@ export default class Office365CalendarService implements Calendar { }; private translateEvent = (event: CalendarEvent) => { + const utcOffset = dayjs(event.startTime, event.organizer.timeZone).utcOffset() / 60; return { subject: event.title, body: { @@ -246,11 +248,11 @@ export default class Office365CalendarService implements Calendar { content: getRichDescription(event), }, start: { - dateTime: event.startTime, + dateTime: dayjs(event.startTime).utcOffset(utcOffset).format(), timeZone: event.organizer.timeZone, }, end: { - dateTime: event.endTime, + dateTime: dayjs(event.endTime).utcOffset(utcOffset).format(), timeZone: event.organizer.timeZone, }, attendees: event.attendees.map((attendee) => ({ diff --git a/packages/app-store/zoomvideo/lib/VideoApiAdapter.ts b/packages/app-store/zoomvideo/lib/VideoApiAdapter.ts index ca00ee9a75..fb22cd1ba6 100644 --- a/packages/app-store/zoomvideo/lib/VideoApiAdapter.ts +++ b/packages/app-store/zoomvideo/lib/VideoApiAdapter.ts @@ -196,11 +196,12 @@ const ZoomVideoApiAdapter = (credential: CredentialPayload): VideoApiAdapter => }; const recurrence = getRecurrence(event); + const utcOffset = dayjs(event.startTime, event.organizer.timeZone).utcOffset() / 60; // Documentation at: https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingcreate return { topic: event.title, type: 2, // Means that this is a scheduled meeting - start_time: event.startTime, + start_time: dayjs(event.startTime).utcOffset(utcOffset).format(), duration: (new Date(event.endTime).getTime() - new Date(event.startTime).getTime()) / 60000, //schedule_for: "string", TODO: Used when scheduling the meeting for someone else (needed?) timezone: event.organizer.timeZone,