描述

按所给的时间格式输出指定的时间
格式说明
对于 2014.09.05 13:14:20
yyyy: 年份,2014
yy: 年份,14
MM: 月份,补满两位,09
M: 月份, 9
dd: 日期,补满两位,05
d: 日期, 5
HH: 24制小时,补满两位,13
H: 24制小时,13
hh: 12制小时,补满两位,01
h: 12制小时,1
mm: 分钟,补满两位,14
m: 分钟,14
ss: 秒,补满两位,20
s: 秒,20
w: 星期,为 [‘日’, ‘一’, ‘二’, ‘三’, ‘四’, ‘五’, ‘六’] 中的某一个,本 demo 结果为 五

示例1

输入:

formatDate(new Date(1409894060000), 'yyyy-MM-dd HH:mm:ss 星期w')

输出:

2014-09-05 13:14:20 星期五
<script>
  const a = formatDate(new Date(new Date().getTimezoneOffset()*60*1000 + 1409894060000), 'yy-M-d hh:m:s 星期w')
  console.log(a)
  function formatDate(date, format) {
      const weeks = {
          "0": "日",
          "1": "一",
          "2": "二",
          "3": "三",
          "4": "四",
          "5": "五",
          "6": "六",
      }
      const fmt = {
          'y+': date.getFullYear(), // 获取完整的年份
          'M+': date.getMonth() + 1, // 获取月份
          'd+': date.getDate(), // 获取第几日
          'H+': date.getHours(), // 获取小时数
          'h+': date.getHours()%12||12, // 0%12得12,12%12得0,24%12得0, 获取12小时制的小时数
          'm+': date.getMinutes(), // 获取分钟数
          's+': date.getSeconds(), // 获取秒数
          'w': weeks[date.getDay()] // date.getDay()获取当前是这周的第几天
      }
      for(let i in fmt) {
          new RegExp('('+i+')').test(format) // 正则测试,获取RegExp对象,其中RegExp.$1是正则匹配得到的值
          let str = ''
          if (RegExp.$1.length === 1) {
            str = fmt[i]
          } else {
            for (let y=0; y<RegExp.$1.length; y++) { // 先往前补充,避免出现位数不足显示为空的情况
              str += '0'
            }
            str += fmt[i]
            str = str.substr(-RegExp.$1.length) // 从末尾反取足够长度的数据
          }
          format = format.replace(RegExp.$1, str) // 替换当前匹配项的数据
      }
      return format
  }
</script>