| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- 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<Date>,
- 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<Date>, reverse: boolean = false): Array<Date> {
- return ArrayUtils.sort(dates, reverse) as Array<Date>
- },
- 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')
- },
- toIsoUtcOffset(date: Date): string {
- return date.toISOString().replace('.000Z', '+00:00')
- },
- combineDateAndTime(date: Date = new Date(), time: string = '00:00'): Date {
- const [hours, minutes] = time.split(':').map(Number)
- const result = new Date(date)
- result.setHours(hours)
- result.setMinutes(minutes)
- result.setSeconds(0)
- result.setMilliseconds(0)
- return result
- },
- isBefore(dateA: string, dateB: string, strictly = true): boolean {
- const a = new Date(dateA)
- const b = new Date(dateB)
- if (isNaN(a.getTime()) || isNaN(b.getTime())) {
- throw new Error('Invalid date format')
- }
- return strictly ? a.getTime() < b.getTime() : a.getTime() <= b.getTime()
- },
- }
- export default DateUtils
|