dateUtils.ts 1.6 KB

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