From a3e0eba706dd855af0e06775e913000c531b9f6e Mon Sep 17 00:00:00 2001 From: Rickard Natt och Dag Date: Thu, 1 Apr 2021 11:40:38 +0200 Subject: [PATCH] fix: add date handler --- lib/utils/__tests__/dateHandling.test.ts | 11 +++++++ lib/utils/dateHandling.ts | 41 ++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 lib/utils/__tests__/dateHandling.test.ts create mode 100644 lib/utils/dateHandling.ts diff --git a/lib/utils/__tests__/dateHandling.test.ts b/lib/utils/__tests__/dateHandling.test.ts new file mode 100644 index 000000000..9abc043b5 --- /dev/null +++ b/lib/utils/__tests__/dateHandling.test.ts @@ -0,0 +1,11 @@ +import { parseDate } from '../dateHandling' + +test.each([ + ['2020-12-21 09:00', '2020-12-21T08:00:00.000Z'], + ['2021-05-28', '2021-05-27T22:00:00.000Z'], + ['2 oktober 2020', '2020-10-01T22:00:00.000Z'], + ['12 oktober 2020', '2020-10-11T22:00:00.000Z'], + ['This is an invalid date', undefined], +])('handles date parsing of %s', (input, expected) => { + expect(parseDate(input)).toEqual(expected) +}) diff --git a/lib/utils/dateHandling.ts b/lib/utils/dateHandling.ts new file mode 100644 index 000000000..f9d8d3970 --- /dev/null +++ b/lib/utils/dateHandling.ts @@ -0,0 +1,41 @@ +import { DateTime } from 'luxon' + +const options = { + locale: 'sv', +} + +export const parseDate = (input?: string): string | undefined => { + if (!input) { + return undefined + } + + const dateParse = (format: string) => + DateTime.fromFormat(input, format, options) + + const dateAndTime = dateParse('yyyy-MM-dd HH:mm') + + if (dateAndTime.isValid) { + return dateAndTime.toUTC().toISO() + } + + const onlyDate = dateParse('yyyy-MM-dd') + + if (onlyDate.isValid) { + return onlyDate.toUTC().toISO() + } + + const dateLongForm = dateParse('dd MMMM yyyy') + + if (dateLongForm.isValid) { + return dateLongForm.toUTC().toISO() + } + + const dateLongFormOneDigit = dateParse('d MMMM yyyy') + + if (dateLongFormOneDigit.isValid) { + return dateLongFormOneDigit.toUTC().toISO() + } + + // Explicit return to satisfy ESLint + return undefined +}