secs.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. const minute = 60;
  2. const hour = minute * 60;
  3. const day = hour * 24;
  4. const week = day * 7;
  5. const year = day * 365.25;
  6. const REGEX = /^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;
  7. export default (str) => {
  8. const matched = REGEX.exec(str);
  9. if (!matched) {
  10. throw new TypeError('Invalid time period format');
  11. }
  12. const value = parseFloat(matched[1]);
  13. const unit = matched[2].toLowerCase();
  14. switch (unit) {
  15. case 'sec':
  16. case 'secs':
  17. case 'second':
  18. case 'seconds':
  19. case 's':
  20. return Math.round(value);
  21. case 'minute':
  22. case 'minutes':
  23. case 'min':
  24. case 'mins':
  25. case 'm':
  26. return Math.round(value * minute);
  27. case 'hour':
  28. case 'hours':
  29. case 'hr':
  30. case 'hrs':
  31. case 'h':
  32. return Math.round(value * hour);
  33. case 'day':
  34. case 'days':
  35. case 'd':
  36. return Math.round(value * day);
  37. case 'week':
  38. case 'weeks':
  39. case 'w':
  40. return Math.round(value * week);
  41. default:
  42. return Math.round(value * year);
  43. }
  44. };