date.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.formatDate = exports.parseDate = exports.DAY = exports.HOUR = exports.MINUTE = exports.SECOND = exports.DATE_TIME_FORMAT = exports.DATE_FORMAT = exports.dayjs = void 0;
  4. const tslib_1 = require("tslib");
  5. /**
  6. * 日期和时间相关
  7. *
  8. * 更复杂的日期操作建议直接使用 dayjs https://dayjs.gitee.io/docs/zh-CN/installation/installation
  9. */
  10. const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
  11. exports.dayjs = dayjs_1.default;
  12. const customParseFormat_1 = tslib_1.__importDefault(require("dayjs/plugin/customParseFormat"));
  13. dayjs_1.default.extend(customParseFormat_1.default);
  14. /**
  15. * @group 日期格式
  16. * @groupOrder 4
  17. */
  18. exports.DATE_FORMAT = 'YYYY-MM-DD';
  19. /**
  20. * @group 日期格式
  21. * @groupOrder 4
  22. */
  23. exports.DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';
  24. exports.SECOND = 1000; // 毫秒
  25. exports.MINUTE = 60 * exports.SECOND;
  26. exports.HOUR = 60 * exports.MINUTE;
  27. exports.DAY = 24 * exports.HOUR;
  28. /**
  29. * 日期解析
  30. *
  31. * @group 日期
  32. * @groupOrder 5
  33. *
  34. * @remarks
  35. * 如果传入数字,我们假定为`毫秒` <br/>
  36. *` parseDate`会先尝试常见的日期格式(例如 YYYY/MM/DD HH:mm:ss、YYYY-MM-DD HH:mm:ss、YYYY-MM-DD),如果`parse`失败就会使用`format`
  37. *
  38. * @param dateString - 要转换成日期的数字和字符串.
  39. * @param format - 用于指定日期的格式。如果你的日期格式不是常见的格式,可以显式指定
  40. * @link https://dayjs.gitee.io/docs/zh-CN/parse/string-format
  41. *
  42. * @example
  43. * 例子:
  44. * ```typescript
  45. * parseDate(3600)
  46. * // => 1970-01-01T00:00:03.600Z
  47. *
  48. * parseDate('2012/12/10 12:12:12')
  49. * // => 2012-02-10T04:12:12.000Z
  50. * ```
  51. * @public
  52. */
  53. function parseDate(dateString, format) {
  54. if (typeof dateString === 'number') {
  55. return new Date(dateString);
  56. }
  57. else if (dateString instanceof Date) {
  58. return dateString;
  59. }
  60. const day = (0, dayjs_1.default)(dateString, format);
  61. if (day.isValid()) {
  62. return day.toDate();
  63. }
  64. else {
  65. if (!format) {
  66. // 兼容 ios
  67. dateString = dateString.replace(/-/g, '/');
  68. dateString = dateString.replace(/T/g, ' ');
  69. }
  70. const retry = (0, dayjs_1.default)(dateString);
  71. if (retry.isValid()) {
  72. return retry.toDate();
  73. }
  74. return null;
  75. }
  76. }
  77. exports.parseDate = parseDate;
  78. /**
  79. * 格式化日期
  80. *
  81. * @group 日期
  82. * @groupOrder 5
  83. *
  84. * @remarks
  85. * 如果传入数字,我们假定为`毫秒`
  86. *
  87. * @param date - 日期.
  88. * @param format - 详见 {@link https://dayjs.gitee.io/docs/zh-CN/parse/string-format}.
  89. *
  90. * @example
  91. * 例子:
  92. * ```
  93. * const day = new Date('2012/12/12 12:12:12');
  94. *
  95. * const target = formatDate(day);
  96. * // => target = "2012-02-10"
  97. *
  98. * const target2 = formatDate(day, 'YYYY-MM-DD HH:mm:ss');
  99. * // => target2 = "2012-02-10 12:12:12"
  100. * ```
  101. * @public
  102. */
  103. function formatDate(date, format = exports.DATE_FORMAT, parseFormat) {
  104. const parsed = parseDate(date, parseFormat);
  105. return (0, dayjs_1.default)(parsed).format(format);
  106. }
  107. exports.formatDate = formatDate;