From d1e586bb395022b47ee018c55e92c618fb511639 Mon Sep 17 00:00:00 2001 From: James Collins Date: Fri, 17 Feb 2023 12:37:12 +1000 Subject: [PATCH] improve datetime regex and added parseAusDateTime --- resources/js/helpers/datetime.ts | 43 +++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/resources/js/helpers/datetime.ts b/resources/js/helpers/datetime.ts index 612b96f..12f13fb 100644 --- a/resources/js/helpers/datetime.ts +++ b/resources/js/helpers/datetime.ts @@ -261,7 +261,8 @@ export const createAusDateTimeObject = ( dateString: string, timeString: string ): Date | null => { - const dateRegex = /^(0?[1-9]|[1-2][0-9]|3[0-1])\/(0?[1-9]|1[0-2])\/\d{4}$/; + const dateRegex = + /^(0?[1-9]|[1-2][0-9]|3[0-1])\/(0?[1-9]|1[0-2])\/(19|20)\d{2}$/; const timeRegex = /^([01]\d|2[0-3]):[0-5]\d$/; if (!dateRegex.test(dateString) || !timeRegex.test(timeString)) { @@ -276,3 +277,43 @@ export const createAusDateTimeObject = ( .map((str) => parseInt(str, 10)); return new Date(year, month - 1, day, hour, minute); }; + +export const parseAusDateTime = (dateTimeStr: string): Date | null => { + const dateStr = dateTimeStr.split(" ")[0]; + const timeStr = dateTimeStr.split(" ")[1]; + + let year: number, month: number, day: number; + const dateParts = dateStr.split("/"); + if (dateParts[2] && dateParts[2].length === 4) { + // If year is in yyyy format + year = +dateParts[2]; + month = +dateParts[1]; + day = +dateParts[0]; + } else { + // If year is in yy format + year = +( + new Date().getFullYear().toString().substr(0, 2) + dateParts[2] + ); + month = +dateParts[1]; + day = +dateParts[0]; + } + + let hour = 0, + minute = 0, + second = 0; + if (timeStr) { + const timeParts = timeStr.split(":"); + hour = +timeParts[0]; + minute = +timeParts[1]; + + if (timeParts[2]) { + second = +timeParts[2]; + } + + if (dateTimeStr.toLowerCase().includes("pm") && hour < 12) { + hour += 12; + } + } + + return new Date(year, month - 1, day, hour, minute, second); +};