# 时间格式化

# 1.格式化时间

const formatDate = (time, fmt = 'yyyy-MM-dd HH:mm:ss') => {
    const isNumber = val => typeof val === 'number' && val === val; 
    const formatNumber = (n, l) => {
        let s = isNumber(n) ? `${n}` : '0'
        while (s.length < l) {
            s = `0${s}`
        }
        return s
    }
    const t = new Date(time)
    const yyyy = formatNumber(t.getFullYear(), 4)
    const MM = (l = 2) => formatNumber(t.getMonth() + 1, l)
    const dd = (l = 2) => formatNumber(t.getDate(), l)
    const HH = (l = 2) => formatNumber(t.getHours(), l)
    const mm = (l = 2) => formatNumber(t.getMinutes(), l)
    const ss = (l = 2) => formatNumber(t.getSeconds(), l)
    return fmt
        .replace('yyyy', yyyy)
        .replace('MM', MM())
        .replace('dd', dd())
        .replace('HH', HH())
        .replace('mm', mm())
        .replace('ss', ss())
        .replace('M', MM(1))
        .replace('d', dd(1))
        .replace('H', HH(1))
        .replace('m', mm(1))
        .replace('s', ss(1))
}

formatDate(1643367041000) // 2022-01-28 18:50:41
formatDate(1643367041000,'HH:mm:ss') // 18:50:41

# 2. 秒数转时分秒

/**
 * @return{string} HH:mm:ss 
*/
const formatSecond = (second) => {
  let timeStr = ''
  let stringFormat = (i) => (i < 10 ? `0${i}` : `${i}`)
  let hourTime = 0
  let minuteTime = 0
  let secondTime = 0
  if (second < 60) {
    timeStr = `00:${stringFormat(second)}`
  } else if (second >= 60 && second < 3600) {
    minuteTime = parseInt(second / 60)
    secondTime = parseInt(second % 60)
    timeStr = `${stringFormat(minuteTime)}:${stringFormat(secondTime)}`
  } else if (second >= 3600) {
    let _t = parseInt(second % 3600) //0
    hourTime = parseInt(second / 3600)
    minuteTime = parseInt(_t / 60)
    secondTime = parseInt(_t % 60)
    timeStr = `${stringFormat(hourTime)}:${stringFormat(
      minuteTime
    )}:${stringFormat(secondTime)}`
  }
  return timeStr
}
// 示例

formatSecond(3600) // 01:00:00 1小时
formatSecond(86400) // 24:00:00 24小时
formatSecond(31536000) // 8760:00:00 一年8760小时


更新时间: 2022-01-28