mirror of
https://github.com/hydralauncher/hydra.git
synced 2026-01-18 16:53:57 +00:00
87 lines
2.1 KiB
TypeScript
87 lines
2.1 KiB
TypeScript
import { format, formatDistance, subMilliseconds } from "date-fns";
|
|
import type { FormatDistanceOptions } from "date-fns";
|
|
import {
|
|
ptBR,
|
|
enUS,
|
|
es,
|
|
fr,
|
|
pl,
|
|
hu,
|
|
tr,
|
|
ru,
|
|
it,
|
|
be,
|
|
zhCN,
|
|
da,
|
|
} from "date-fns/locale";
|
|
import { useTranslation } from "react-i18next";
|
|
|
|
export function useDate() {
|
|
const { i18n } = useTranslation();
|
|
|
|
const { language } = i18n;
|
|
|
|
const getDateLocale = () => {
|
|
if (language.startsWith("pt")) return ptBR;
|
|
if (language.startsWith("es")) return es;
|
|
if (language.startsWith("fr")) return fr;
|
|
if (language.startsWith("hu")) return hu;
|
|
if (language.startsWith("pl")) return pl;
|
|
if (language.startsWith("tr")) return tr;
|
|
if (language.startsWith("ru")) return ru;
|
|
if (language.startsWith("it")) return it;
|
|
if (language.startsWith("be")) return be;
|
|
if (language.startsWith("zh")) return zhCN;
|
|
if (language.startsWith("da")) return da;
|
|
|
|
return enUS;
|
|
};
|
|
|
|
return {
|
|
formatDistance: (
|
|
date: string | number | Date,
|
|
baseDate: string | number | Date,
|
|
options?: FormatDistanceOptions
|
|
) => {
|
|
try {
|
|
return formatDistance(date, baseDate, {
|
|
...options,
|
|
locale: getDateLocale(),
|
|
});
|
|
} catch (err) {
|
|
return "";
|
|
}
|
|
},
|
|
|
|
formatDiffInMillis: (
|
|
millis: number,
|
|
baseDate: string | number | Date,
|
|
options?: FormatDistanceOptions
|
|
) => {
|
|
try {
|
|
return formatDistance(subMilliseconds(new Date(), millis), baseDate, {
|
|
...options,
|
|
locale: getDateLocale(),
|
|
});
|
|
} catch (err) {
|
|
return "";
|
|
}
|
|
},
|
|
|
|
formatDateTime: (date: number | Date | string): string => {
|
|
const locale = getDateLocale();
|
|
return format(
|
|
date,
|
|
locale == enUS ? "MM/dd/yyyy - HH:mm" : "dd/MM/yyyy HH:mm"
|
|
);
|
|
},
|
|
|
|
formatDate: (date: number | Date | string): string => {
|
|
if (isNaN(new Date(date).getDate())) return "N/A";
|
|
|
|
const locale = getDateLocale();
|
|
return format(date, locale == enUS ? "MM/dd/yyyy" : "dd/MM/yyyy");
|
|
},
|
|
};
|
|
}
|