formatTimeToString.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import getFormatBasedOnCount from "./getFormatBasedOnCount"
  2. export default (formats, andFunctionWord, ms) => {
  3. if ( !Number.isInteger(ms) ) {
  4. return null
  5. }
  6. const allocate = msUnit => {
  7. const units = Math.trunc(ms / msUnit)
  8. ms -= units * msUnit
  9. return units
  10. }
  11. const units = {
  12. days: allocate(86400000),
  13. hours: allocate(3600000),
  14. minutes: allocate(60000),
  15. seconds: allocate(1000),
  16. ms // remainder
  17. }
  18. let result = [];
  19. if (units.days > 0) {
  20. result.push(`${units.days} ${getFormatBasedOnCount(formats.days, units.days)}`)
  21. }
  22. if (units.hours > 0) {
  23. result.push(`${units.hours} ${getFormatBasedOnCount(formats.hours, units.hours)}`)
  24. }
  25. if (units.minutes > 0) {
  26. result.push(`${units.minutes} ${getFormatBasedOnCount(formats.minutes, units.minutes)}`)
  27. }
  28. if (units.seconds > 0) {
  29. result.push(`${units.seconds} ${getFormatBasedOnCount(formats.seconds, units.seconds)}`)
  30. }
  31. const last = result.pop();
  32. return result.join(', ') + ` ${andFunctionWord} ` + last
  33. }