功能实现之时间格式化函数

好久没写函数封装的东西了,最近忽然发现还没有试过写时间格式化函数,这里给出我写的简单的时间格式化函数,如果想要功能强大的时间格式化工具,可以去看看moment哦,文章内有传送门

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function formatDate(date, formatString){
if (typeof date === 'string' || typeof date === 'number'){
date = new Date(date)
}
if (!(date instanceof Date)){
throw new TypeError("时间格式不规范")
}

if (typeof formatString !== 'string'){
throw new TypeError("格式化字符串类型错误")
}

const RegEs = [
{reg: "YYYY", data: date.getFullYear()}, //年份
{reg: "YY", data: date.getFullYear()}, //年份
{reg: "MM", data: date.getMonth() + 1}, //月份
{reg: "DD", data: date.getDate()}, //日期
{reg: "D", data: date.getDay()}, //星期
{reg: "HH", data: date.getHours()}, //小时24小时制
{reg: "hh", data: date.getHours() % 12}, //小时12小时制
{reg: "mm", data: date.getMinutes()}, //分钟
{reg: "ss", data: date.getSeconds()}, //秒
]
RegEs.forEach(RegE => {
let regExp = new RegExp(`${RegE.reg}`, 'g')
while (1){
let result = regExp.exec(formatString)
if (!result) break

formatString = formatString.replace(result[0], (new Array(result[0].length).fill('0').join('') + RegE.data).substr(-result[0].length))
}
})

return formatString
}

用法

参数说明

参数 类型 是否必传 说明
date String,Number,Date 时间
formatString String 时间格式化字符串

格式化支持

表达式 内容
YYYY 千年份
YY 百年份
MM 月份
DD 当月日期
HH 小时24小时制
hh 小时12小时制
mm 分钟
ss

超简单解析

就是用正则表达式啦,然后存在包含关系的就长的优先进行匹配就行了

END

2018-02-24 完成

2018-02-24 立项