moment_wrapper.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import { TimeZone } from '../types/time';
  2. /* tslint:disable:import-blacklist ban ban-types */
  3. import moment, { MomentInput, DurationInputArg1 } from 'moment';
  4. export interface DateTimeBuiltinFormat {
  5. __momentBuiltinFormatBrand: any;
  6. }
  7. export const ISO_8601: DateTimeBuiltinFormat = moment.ISO_8601;
  8. export type DateTimeInput = Date | string | number | Array<string | number> | DateTime; // null | undefined
  9. export type FormatInput = string | DateTimeBuiltinFormat | undefined;
  10. export type DurationInput = string | number | DateTimeDuration;
  11. export type DurationUnit =
  12. | 'year'
  13. | 'years'
  14. | 'y'
  15. | 'month'
  16. | 'months'
  17. | 'M'
  18. | 'week'
  19. | 'weeks'
  20. | 'w'
  21. | 'day'
  22. | 'days'
  23. | 'd'
  24. | 'hour'
  25. | 'hours'
  26. | 'h'
  27. | 'minute'
  28. | 'minutes'
  29. | 'm'
  30. | 'second'
  31. | 'seconds'
  32. | 's'
  33. | 'millisecond'
  34. | 'milliseconds'
  35. | 'ms'
  36. | 'quarter'
  37. | 'quarters'
  38. | 'Q';
  39. export interface DateTimeLocale {
  40. firstDayOfWeek: () => number;
  41. }
  42. export interface DateTimeDuration {
  43. asHours: () => number;
  44. hours: () => number;
  45. minutes: () => number;
  46. seconds: () => number;
  47. asSeconds: () => number;
  48. }
  49. export interface DateTime extends Object {
  50. add: (amount?: DateTimeInput, unit?: DurationUnit) => DateTime;
  51. set: (unit: DurationUnit, amount: DateTimeInput) => void;
  52. diff: (amount: DateTimeInput, unit?: DurationUnit, truncate?: boolean) => number;
  53. endOf: (unitOfTime: DurationUnit) => DateTime;
  54. format: (formatInput?: FormatInput) => string;
  55. fromNow: (withoutSuffix?: boolean) => string;
  56. from: (formaInput: DateTimeInput) => string;
  57. isSame: (input?: DateTimeInput, granularity?: DurationUnit) => boolean;
  58. isValid: () => boolean;
  59. local: () => DateTime;
  60. locale: (locale: string) => DateTime;
  61. startOf: (unitOfTime: DurationUnit) => DateTime;
  62. subtract: (amount?: DateTimeInput, unit?: DurationUnit) => DateTime;
  63. toDate: () => Date;
  64. toISOString: () => string;
  65. isoWeekday: (day?: number | string) => number | string;
  66. valueOf: () => number;
  67. unix: () => number;
  68. utc: () => DateTime;
  69. utcOffset: () => number;
  70. hour?: () => number;
  71. }
  72. export const setLocale = (language: string) => {
  73. moment.locale(language);
  74. };
  75. export const getLocaleData = (): DateTimeLocale => {
  76. return moment.localeData();
  77. };
  78. export const isDateTime = (value: any): value is DateTime => {
  79. return moment.isMoment(value);
  80. };
  81. export const toUtc = (input?: DateTimeInput, formatInput?: FormatInput): DateTime => {
  82. return moment.utc(input as MomentInput, formatInput) as DateTime;
  83. };
  84. export const toDuration = (input?: DurationInput, unit?: DurationUnit): DateTimeDuration => {
  85. return moment.duration(input as DurationInputArg1, unit) as DateTimeDuration;
  86. };
  87. export const dateTime = (input?: DateTimeInput, formatInput?: FormatInput): DateTime => {
  88. return moment(input as MomentInput, formatInput) as DateTime;
  89. };
  90. export const dateTimeForTimeZone = (
  91. timezone?: TimeZone,
  92. input?: DateTimeInput,
  93. formatInput?: FormatInput
  94. ): DateTime => {
  95. if (timezone === 'utc') {
  96. return toUtc(input, formatInput);
  97. }
  98. return dateTime(input, formatInput);
  99. };