From 9a08fbb22ddeb60b74c998e65f74a9edeaacbd17 Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Sat, 5 Aug 2023 07:44:47 +0100 Subject: [PATCH] perf: Use Intl.DateTimeFormat instead of Dayjs.tz().format() (#10604) --- .../trpc/server/routers/viewer/slots/util.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/trpc/server/routers/viewer/slots/util.ts b/packages/trpc/server/routers/viewer/slots/util.ts index 859c7d5965..553211db24 100644 --- a/packages/trpc/server/routers/viewer/slots/util.ts +++ b/packages/trpc/server/routers/viewer/slots/util.ts @@ -408,17 +408,27 @@ export async function getSchedule(input: TGetScheduleInputSchema) { } availableTimeSlots = availableTimeSlots.filter((slot) => isTimeWithinBounds(slot.time)); + // fr-CA uses YYYY-MM-DD + const formatter = new Intl.DateTimeFormat("fr-CA", { + year: "numeric", + month: "2-digit", + day: "2-digit", + timeZone: input.timeZone, + }); const computedAvailableSlots = availableTimeSlots.reduce( ( r: Record, - { time: _time, ...passThroughProps } + { time, ...passThroughProps } ) => { // TODO: Adds unit tests to prevent regressions in getSchedule (try multiple timezones) - const time = _time.tz(input.timeZone); - r[time.format("YYYY-MM-DD")] = r[time.format("YYYY-MM-DD")] || []; - r[time.format("YYYY-MM-DD")].push({ + // This used to be _time.tz(input.timeZone) but Dayjs tz() is slow. + // toLocaleDateString slugish, using Intl.DateTimeFormat we get the desired speed results. + const dateString = formatter.format(time.toDate()); + + r[dateString] = r[dateString] || []; + r[dateString].push({ ...passThroughProps, time: time.toISOString(), users: (eventType.hosts