utils.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
  2. import padStart from 'lodash-es/padStart';
  3. // Countdown
  4. var timeUnits = [['Y', 1000 * 60 * 60 * 24 * 365], ['M', 1000 * 60 * 60 * 24 * 30], ['D', 1000 * 60 * 60 * 24], ['H', 1000 * 60 * 60], ['m', 1000 * 60], ['s', 1000], ['S', 1] // million seconds
  5. ];
  6. export function formatTimeStr(duration, format) {
  7. var leftDuration = duration;
  8. var escapeRegex = /\[[^\]]*]/g;
  9. var keepList = (format.match(escapeRegex) || []).map(function (str) {
  10. return str.slice(1, -1);
  11. });
  12. var templateText = format.replace(escapeRegex, '[]');
  13. var replacedText = timeUnits.reduce(function (current, _ref) {
  14. var _ref2 = _slicedToArray(_ref, 2),
  15. name = _ref2[0],
  16. unit = _ref2[1];
  17. if (current.indexOf(name) !== -1) {
  18. var value = Math.floor(leftDuration / unit);
  19. leftDuration -= value * unit;
  20. return current.replace(new RegExp("".concat(name, "+"), 'g'), function (match) {
  21. var len = match.length;
  22. return padStart(value.toString(), len, '0');
  23. });
  24. }
  25. return current;
  26. }, templateText);
  27. var index = 0;
  28. return replacedText.replace(escapeRegex, function () {
  29. var match = keepList[index];
  30. index += 1;
  31. return match;
  32. });
  33. }
  34. export function formatCountdown(value, config) {
  35. var _config$format = config.format,
  36. format = _config$format === void 0 ? '' : _config$format;
  37. var target = new Date(value).getTime();
  38. var current = Date.now();
  39. var diff = Math.max(target - current, 0);
  40. return formatTimeStr(diff, format);
  41. }