chore(client/ts): port utils/formatters

This commit is contained in:
Elian Doran 2024-12-22 22:16:00 +02:00
parent a349223e54
commit 0bad36b9f2
No known key found for this signature in database

View File

@ -1,17 +1,16 @@
type DateTimeStyle = "full" | "long" | "medium" | "short" | "none" | undefined;
/** /**
* Formats the given date and time to a string based on the current locale. * Formats the given date and time to a string based on the current locale.
* @param {string | Date | number} date
* @param {"full" | "long" | "medium" | "short" | "none" | undefined} dateStyle
* @param {"full" | "long" | "medium" | "short" | "none" | undefined} timeStyle
*/ */
export function formatDateTime(date, dateStyle = "medium", timeStyle = "medium") { export function formatDateTime(date: string | Date | number, dateStyle: DateTimeStyle = "medium", timeStyle: DateTimeStyle = "medium") {
const locale = navigator.language; const locale = navigator.language;
let parsedDate; let parsedDate;
if (typeof date === "string") { if (typeof date === "string" || typeof date === "number") {
// Parse the given string as a date // Parse the given string as a date
parsedDate = new Date(date); parsedDate = new Date(date);
} else if (typeof date === "number" || date instanceof Date) { } else if (date instanceof Date) {
// The given date is already a Date instance or a number // The given date is already a Date instance or a number
parsedDate = date; parsedDate = date;
} else { } else {
@ -19,16 +18,18 @@ export function formatDateTime(date, dateStyle = "medium", timeStyle = "medium")
throw new TypeError(`Invalid type for the "date" argument.`); throw new TypeError(`Invalid type for the "date" argument.`);
}; };
if (timeStyle === "none") { if (timeStyle !== "none" && dateStyle !== "none") {
// Format only the date
return parsedDate.toLocaleDateString(locale, {dateStyle});
} else if (dateStyle === "none") {
// Format only the time
return parsedDate.toLocaleTimeString(locale, {timeStyle});
} else {
// Format the date and time // Format the date and time
const formatter = new Intl.DateTimeFormat(navigator.language, {dateStyle, timeStyle}); const formatter = new Intl.DateTimeFormat(navigator.language, {dateStyle, timeStyle});
return formatter.format(parsedDate); return formatter.format(parsedDate);
} else if (timeStyle === "none" && dateStyle !== "none") {
// Format only the date
return parsedDate.toLocaleDateString(locale, {dateStyle});
} else if (dateStyle === "none" && timeStyle !== "none") {
// Format only the time
return parsedDate.toLocaleTimeString(locale, {timeStyle});
} }
throw new Error("Incorrect state.");
} }