import { format } from 'date-fns' import { enUS, fr } from 'date-fns/locale' import ArrayUtils from '~/services/utils/arrayUtils' export const enum supportedLocales { FR = 'fr', EN = 'en', } const defaultLocale = 'fr' const DateUtils = { format(date: Date, fmt: string): string { return format(date, fmt) }, /** * Formate la ou les dates au format donné et retourne la liste concaténée * * @param dates * @param fmt * @param sep */ formatAndConcat( dates: Date | Array, fmt: string, sep: string = ' - ', ): string { dates = Array.isArray(dates) ? dates : [dates] return dates.map((d) => this.format(d, fmt)).join(sep) }, /** * Trie les dates par ordre chronologique * * @param dates * @param reverse */ sort( dates: Array, reverse: boolean = false, ): Array { return ArrayUtils.sort(dates, reverse) as Array }, getFnsLocale(code: supportedLocales): Locale { // noinspection TypeScriptUnresolvedReference const mapping = { en: enUS, fr, } return mapping[code] ?? mapping[defaultLocale] }, getShortFormatPattern(code: supportedLocales): string { const mapping = { en: 'MM/dd/yyyy', fr: 'dd/MM/yyyy', } return mapping[code] ?? mapping[defaultLocale] }, getFormatPattern(code: supportedLocales): string { const mapping = { en: 'MM/dd/yyyy HH:mm', fr: 'dd/MM/yyyy HH:mm', } return mapping[code] ?? mapping[defaultLocale] }, formatIsoShortDate(date: Date): string { return format(date, 'yyyy-MM-dd') } } export default DateUtils