From cc5537dd1fcb7aa8ea951a0ff4d6a7116b04f3c0 Mon Sep 17 00:00:00 2001 From: buschco Date: Mon, 28 Mar 2022 20:50:31 +0200 Subject: [PATCH] improve date query parsing (#1992) (#2296) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Omar López --- .../booking/pages/AvailabilityPage.tsx | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/apps/web/components/booking/pages/AvailabilityPage.tsx b/apps/web/components/booking/pages/AvailabilityPage.tsx index 100f6699..1e69b4c8 100644 --- a/apps/web/components/booking/pages/AvailabilityPage.tsx +++ b/apps/web/components/booking/pages/AvailabilityPage.tsx @@ -59,12 +59,18 @@ const AvailabilityPage = ({ profile, eventType, workingHours, previousPage }: Pr const selectedDate = useMemo(() => { const dateString = asStringOrNull(router.query.date); if (dateString) { - // todo some extra validation maybe. - const utcOffsetAsDate = dayjs(dateString.substr(11, 14), "Hmm"); - const utcOffset = parseInt( - dateString.substr(10, 1) + (utcOffsetAsDate.hour() * 60 + utcOffsetAsDate.minute()) - ); - const date = dayjs(dateString.substr(0, 10)).utcOffset(utcOffset, true); + const offsetString = dateString.substr(11, 14); // hhmm + const offsetSign = dateString.substr(10, 1); // + or - + + const offsetHour = offsetString.slice(0, -2); + const offsetMinute = offsetString.slice(-2); + + const utcOffsetInMinutes = + (offsetSign === "-" ? -1 : 1) * + (60 * (offsetHour !== "" ? parseInt(offsetHour) : 0) + + (offsetMinute !== "" ? parseInt(offsetMinute) : 0)); + + const date = dayjs(dateString.substr(0, 10)).utcOffset(utcOffsetInMinutes, true); return date.isValid() ? date : null; } return null;