dateUtils.ts 1.8 KB

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