dateUtils.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { format } from "date-fns";
  2. import type { Locale } from "date-fns";
  3. import ArrayUtils from "~/services/utils/arrayUtils";
  4. import { enUS, fr } from 'date-fns/locale'
  5. export const enum supportedLocales {
  6. FR = 'fr',
  7. EN = 'en'
  8. }
  9. const defaultLocale = 'fr'
  10. export default class DateUtils {
  11. public static format(date: Date, fmt: string): string {
  12. return format(date, fmt)
  13. }
  14. /**
  15. * Formate la ou les dates au format donné et retourne la liste concaténée
  16. *
  17. * @param dates
  18. * @param fmt
  19. * @param sep
  20. */
  21. public static formatAndConcat (dates: Date | Array<Date>, fmt: string, sep: string = ' - '): string {
  22. dates = Array.isArray(dates) ? dates : [dates]
  23. return dates.map((d) => this.format(d, fmt)).join(sep)
  24. }
  25. /**
  26. * Trie les dates par ordre chronologique
  27. *
  28. * @param dates
  29. * @param reverse
  30. */
  31. public static sort(dates: Array<Date>, reverse: boolean = false): Array<Date> {
  32. return ArrayUtils.sort(dates, reverse) as Array<Date>
  33. }
  34. public static getFnsLocale(code: supportedLocales): Locale {
  35. const mapping = {
  36. 'en': enUS,
  37. 'fr' : fr
  38. }
  39. return mapping[code] ?? mapping[defaultLocale]
  40. }
  41. public static getShortFormatPattern(code: supportedLocales): string {
  42. const mapping = {
  43. 'en': 'MM/dd/yyyy',
  44. 'fr': 'dd/MM/yyyy'
  45. }
  46. return mapping[code] ?? mapping[defaultLocale]
  47. }
  48. public static getFormatPattern(code: supportedLocales): string {
  49. const mapping = {
  50. 'en': 'MM/dd/yyyy HH:mm',
  51. 'fr': 'dd/MM/yyyy HH:mm'
  52. }
  53. return mapping[code] ?? mapping[defaultLocale]
  54. }
  55. public static formatIsoShortDate(date: Date): string {
  56. return format(date, 'yyyy-MM-dd')
  57. }
  58. }