简单的时间格式化

来源于 weui 里的一段格式化代码
更新于: 2023-08-09 10:05:15
function format(time, reg) {
  const date = typeof time === 'string' ? new Date(time) : time
  const map = {}
  map.yyyy = date.getFullYear()
  map.yy = ('' + map.yyyy).substr(2)
  map.M = date.getMonth() + 1
  map.MM = (map.M < 10 ? '0' : '') + map.M
  map.d = date.getDate()
  map.dd = (map.d < 10 ? '0' : '') + map.d
  map.H = date.getHours()
  map.HH = (map.H < 10 ? '0' : '') + map.H
  map.m = date.getMinutes()
  map.mm = (map.m < 10 ? '0' : '') + map.m
  map.s = date.getSeconds()
  map.ss = (map.s < 10 ? '0' : '') + map.s

  return reg.replace(/\byyyy|yy|MM|M|dd|d|HH|H|mm|m|ss|s\b/g, $1 => map[$1])
}

// 代码分析
// 1. 得到日期对象 date
// 2. 构造 map,结果如下:
const map = {
    "yyyy": 2023,
    "yy": "23",
    "M": 8,
    "MM": "08",
    "d": 9,
    "dd": "09",
    "H": 10,
    "HH": "10",
    "m": 0,
    "mm": "00",
    "s": 4,
    "ss": "04"
}

// 3. 利用 reg /\byyyy|yy|MM|M|dd|d|HH|H|mm|m|ss|s\b/g 来分离格式
// 4. replace 函数,来完成从正则中逐步取值替换的逻辑