dateUtils.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. const DateUtils = {
  10. format(date: Date, fmt: string): string {
  11. return format(date, fmt)
  12. },
  13. /**
  14. * Formate la ou les dates au format donné et retourne la liste concaténée
  15. *
  16. * @param dates
  17. * @param fmt
  18. * @param sep
  19. */
  20. formatAndConcat(
  21. dates: Date | Array<Date>,
  22. fmt: string,
  23. sep: string = ' - ',
  24. ): string {
  25. dates = Array.isArray(dates) ? dates : [dates]
  26. return dates.map((d) => this.format(d, fmt)).join(sep)
  27. },
  28. /**
  29. * Trie les dates par ordre chronologique
  30. *
  31. * @param dates
  32. * @param reverse
  33. */
  34. sort(dates: Array<Date>, reverse: boolean = false): Array<Date> {
  35. return ArrayUtils.sort(dates, reverse) as Array<Date>
  36. },
  37. getFnsLocale(code: supportedLocales): Locale {
  38. // noinspection TypeScriptUnresolvedReference
  39. const mapping = {
  40. en: enUS,
  41. fr,
  42. }
  43. return mapping[code] ?? mapping[defaultLocale]
  44. },
  45. getShortFormatPattern(code: supportedLocales): string {
  46. const mapping = {
  47. en: 'MM/dd/yyyy',
  48. fr: 'dd/MM/yyyy',
  49. }
  50. return mapping[code] ?? mapping[defaultLocale]
  51. },
  52. getFormatPattern(code: supportedLocales): string {
  53. const mapping = {
  54. en: 'MM/dd/yyyy HH:mm',
  55. fr: 'dd/MM/yyyy HH:mm',
  56. }
  57. return mapping[code] ?? mapping[defaultLocale]
  58. },
  59. formatIsoShortDate(date: Date): string {
  60. return format(date, 'yyyy-MM-dd')
  61. },
  62. toIsoUtcOffset(date: Date): string {
  63. return date.toISOString().replace('.000Z', '+00:00')
  64. },
  65. combineDateAndTime(date: Date = new Date(), time: string = '00:00'): Date {
  66. const [hours, minutes] = time.split(':').map(Number)
  67. const result = new Date(date)
  68. result.setHours(hours)
  69. result.setMinutes(minutes)
  70. result.setSeconds(0)
  71. result.setMilliseconds(0)
  72. return result
  73. },
  74. isBefore(dateA: string, dateB: string, strictly = true): boolean {
  75. const a = new Date(dateA)
  76. const b = new Date(dateB)
  77. if (isNaN(a.getTime()) || isNaN(b.getTime())) {
  78. throw new Error('Invalid date format')
  79. }
  80. return strictly ? a.getTime() < b.getTime() : a.getTime() <= b.getTime()
  81. },
  82. }
  83. export default DateUtils