utils.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.formatCountdown = formatCountdown;
  7. exports.formatTimeStr = formatTimeStr;
  8. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  9. var _padStart = _interopRequireDefault(require("lodash/padStart"));
  10. // Countdown
  11. 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
  12. ];
  13. function formatTimeStr(duration, format) {
  14. var leftDuration = duration;
  15. var escapeRegex = /\[[^\]]*]/g;
  16. var keepList = (format.match(escapeRegex) || []).map(function (str) {
  17. return str.slice(1, -1);
  18. });
  19. var templateText = format.replace(escapeRegex, '[]');
  20. var replacedText = timeUnits.reduce(function (current, _ref) {
  21. var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
  22. name = _ref2[0],
  23. unit = _ref2[1];
  24. if (current.indexOf(name) !== -1) {
  25. var value = Math.floor(leftDuration / unit);
  26. leftDuration -= value * unit;
  27. return current.replace(new RegExp("".concat(name, "+"), 'g'), function (match) {
  28. var len = match.length;
  29. return (0, _padStart.default)(value.toString(), len, '0');
  30. });
  31. }
  32. return current;
  33. }, templateText);
  34. var index = 0;
  35. return replacedText.replace(escapeRegex, function () {
  36. var match = keepList[index];
  37. index += 1;
  38. return match;
  39. });
  40. }
  41. function formatCountdown(value, config) {
  42. var _config$format = config.format,
  43. format = _config$format === void 0 ? '' : _config$format;
  44. var target = new Date(value).getTime();
  45. var current = Date.now();
  46. var diff = Math.max(target - current, 0);
  47. return formatTimeStr(diff, format);
  48. }