mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-08-19 17:12:29 +08:00
chore(client/ts): port utils/formatters
This commit is contained in:
parent
a349223e54
commit
0bad36b9f2
@ -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.");
|
||||||
}
|
}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user