今天小编刷视频看到一种对参数进行统一归化的案例,觉得不错记录一下
效果如上,传递三个参数,第一个时间,第二个选择的格式,第三个是否补充0。
具体做法如下
先创建一个辅助函数来判断格式
function _formatNormailze (formatter) {
if (typeof formatter === 'function') {
return formatter
}
if (typeof formatter !== 'string') {
throw new TypeError('formatter is not string')
}
if (formatter === 'date') {
formatter = 'yyyy-MM-dd'
}
if (formatter == 'datetime') {
formatter = "yyyy-MM-dd HH:mm:ss"
}
const formatterFunc = (dateInfo) => {
console.log()
const { yyyy, MM, dd, HH, mm, ss, ms } = dateInfo
formatter = formatter.replace("yyyy", yyyy)
.replaceAll("MM", MM)
.replaceAll("dd", dd)
.replace("HH", HH)
.replace("mm", mm)
.replace("ss", ss)
.replace("ms", ms)
return formatter
}
return formatterFunc
}
然后在函数里面调用辅助函数
之后创建有个dateInfo对象来存储时间
下一步来写个辅助函数来给时间填补0
最后把dateInfo传到新函数里,用有个变量来接收,再return回去。
完整代码如下
function formate (date, formatter, isPad) {
formatter = _formatNormailze(formatter)
const dateInfo = {
yyyy: date.getFullYear().toString(),
MM: (date.getMonth() + 1).toString(),
dd: date.getDate().toString(),
HH: date.getHours().toString(),
mm: date.getMinutes().toString(),
ss: date.getSeconds().toString(),
ms: date.getMilliseconds().toString()
}
function _pad (prop, len) {
dateInfo[prop] = dateInfo[prop].padStart(len, '0')
}
if (isPad) {
_pad('yyyy', 4)
_pad('MM', 2)
_pad('dd', 2)
_pad('HH', 2)
_pad('mm', 2)
_pad('ss', 2)
_pad('ms', 3)
}
const result = formatter(dateInfo)
console.log(result)
return result
}