moment.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = void 0;
  7. var _warning = require("../../vc-util/warning");
  8. var _moment = _interopRequireDefault(require("moment"));
  9. const generateConfig = {
  10. // get
  11. getNow: () => (0, _moment.default)(),
  12. getFixedDate: string => (0, _moment.default)(string, 'YYYY-MM-DD'),
  13. getEndDate: date => {
  14. const clone = date.clone();
  15. return clone.endOf('month');
  16. },
  17. getWeekDay: date => {
  18. const clone = date.clone().locale('en_US');
  19. return clone.weekday() + clone.localeData().firstDayOfWeek();
  20. },
  21. getYear: date => date.year(),
  22. getMonth: date => date.month(),
  23. getDate: date => date.date(),
  24. getHour: date => date.hour(),
  25. getMinute: date => date.minute(),
  26. getSecond: date => date.second(),
  27. // set
  28. addYear: (date, diff) => {
  29. const clone = date.clone();
  30. return clone.add(diff, 'year');
  31. },
  32. addMonth: (date, diff) => {
  33. const clone = date.clone();
  34. return clone.add(diff, 'month');
  35. },
  36. addDate: (date, diff) => {
  37. const clone = date.clone();
  38. return clone.add(diff, 'day');
  39. },
  40. setYear: (date, year) => {
  41. const clone = date.clone();
  42. return clone.year(year);
  43. },
  44. setMonth: (date, month) => {
  45. const clone = date.clone();
  46. return clone.month(month);
  47. },
  48. setDate: (date, num) => {
  49. const clone = date.clone();
  50. return clone.date(num);
  51. },
  52. setHour: (date, hour) => {
  53. const clone = date.clone();
  54. return clone.hour(hour);
  55. },
  56. setMinute: (date, minute) => {
  57. const clone = date.clone();
  58. return clone.minute(minute);
  59. },
  60. setSecond: (date, second) => {
  61. const clone = date.clone();
  62. return clone.second(second);
  63. },
  64. // Compare
  65. isAfter: (date1, date2) => date1.isAfter(date2),
  66. isValidate: date => date.isValid(),
  67. locale: {
  68. getWeekFirstDay: locale => {
  69. const date = (0, _moment.default)().locale(locale);
  70. return date.localeData().firstDayOfWeek();
  71. },
  72. getWeekFirstDate: (locale, date) => {
  73. const clone = date.clone();
  74. const result = clone.locale(locale);
  75. return result.weekday(0);
  76. },
  77. getWeek: (locale, date) => {
  78. const clone = date.clone();
  79. const result = clone.locale(locale);
  80. return result.week();
  81. },
  82. getShortWeekDays: locale => {
  83. const date = (0, _moment.default)().locale(locale);
  84. return date.localeData().weekdaysMin();
  85. },
  86. getShortMonths: locale => {
  87. const date = (0, _moment.default)().locale(locale);
  88. return date.localeData().monthsShort();
  89. },
  90. format: (locale, date, format) => {
  91. const clone = date.clone();
  92. const result = clone.locale(locale);
  93. return result.format(format);
  94. },
  95. parse: (locale, text, formats) => {
  96. const fallbackFormatList = [];
  97. for (let i = 0; i < formats.length; i += 1) {
  98. let format = formats[i];
  99. let formatText = text;
  100. if (format.includes('wo') || format.includes('Wo')) {
  101. format = format.replace(/wo/g, 'w').replace(/Wo/g, 'W');
  102. const matchFormat = format.match(/[-YyMmDdHhSsWwGg]+/g);
  103. const matchText = formatText.match(/[-\d]+/g);
  104. if (matchFormat && matchText) {
  105. format = matchFormat.join('');
  106. formatText = matchText.join('');
  107. } else {
  108. fallbackFormatList.push(format.replace(/o/g, ''));
  109. }
  110. }
  111. const date = (0, _moment.default)(formatText, format, locale, true);
  112. if (date.isValid()) {
  113. return date;
  114. }
  115. }
  116. // Fallback to fuzzy matching, this should always not reach match or need fire a issue
  117. for (let i = 0; i < fallbackFormatList.length; i += 1) {
  118. const date = (0, _moment.default)(text, fallbackFormatList[i], locale, false);
  119. /* istanbul ignore next */
  120. if (date.isValid()) {
  121. (0, _warning.noteOnce)(false, 'Not match any format strictly and fallback to fuzzy match. Please help to fire a issue about this.');
  122. return date;
  123. }
  124. }
  125. return null;
  126. }
  127. },
  128. toDate: (value, valueFormat) => {
  129. if (Array.isArray(value)) {
  130. return value.map(val => typeof val === 'string' && val ? (0, _moment.default)(val, valueFormat) : val || null);
  131. } else {
  132. return typeof value === 'string' && value ? (0, _moment.default)(value, valueFormat) : value || null;
  133. }
  134. },
  135. toString: (value, valueFormat) => {
  136. if (Array.isArray(value)) {
  137. return value.map(val => _moment.default.isMoment(val) ? val.format(valueFormat) : val);
  138. } else {
  139. return _moment.default.isMoment(value) ? value.format(valueFormat) : value;
  140. }
  141. }
  142. };
  143. var _default = exports.default = generateConfig;