sec-to-hms.js

import padStart from 'lodash-es/padStart.js'

/**
 * Converts seconds (or milliseconds) to HH:MM:SS string.
 *
 * @param {number|string} secs Duration value.
 * @param {boolean} [ms] Treat input as milliseconds when true.
 * @returns {string} Formatted duration.
 */
export default function secToHms (secs, ms) {
  let remain
  if (ms) {
    remain = secs % 1000
    secs = Math.floor(secs / 1000)
  }
  const secNum = parseInt(secs, 10)
  const hours = Math.floor(secNum / 3600)
  const minutes = Math.floor(secNum / 60) % 60
  const seconds = secNum % 60

  let hms = [hours, minutes, seconds]
    .map(v => v < 10 ? '0' + v : v)
    .filter((v, i) => v !== '00' || i > 0)
    .join(':')
  if (ms) hms += '+' + padStart(remain, 3, '0')
  return hms
}