//采用正则格式化日期
functiondateFormat(fmt, date) {
let ret;
let opt={"Y+": date.getFullYear().toString(), //年
"m+": (date.getMonth() + 1).toString(), //月
"d+": date.getDate().toString(), //日
"H+": date.getHours().toString(), //时
"M+": date.getMinutes().toString(), //分
"S+": date.getSeconds().toString() //秒
//有其他格式化字符需求可以继续添加,必须转化成字符串
};for (let k inopt) {
let reg = new RegExp("(" + k + ")");
ret = reg.exec(fmt);
console.log(reg);
console.log(ret);
if(ret) {
fmt= fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
};
};returnfmt;
}
通过验证,如下图:
exec方法匹配失败返回null,成功返回了数组对象。
通过加断点采用test方法时,成功返回true,失败返回false。
RegExp
无论采用哪种方式都可以使用RegExp对象,
如果成功RegExp.$1返回匹配到的字符串,比如/(m+)/匹配到mm。$0 $2都会返回"",空字符串。
padStart
padStart(len,str) :该方法用于补全字符串
len:补全长度
str:补充的字符串,使用这个字符串补充。
fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
解释:
fmt: yyyy-mm-dd HH:MM:SS
ret:每一次匹配的结果,比如匹配到mm,ret[1] = mm,ret[1].length = 2,表示日期格式月份的长度应该是2,此时
(ret[1].length == 1) ?不成立,执行
opt[k].padStart(ret[1].length, "0")),
opt[k]是月份值,如果月份长度不是月份格式长度,表示此时月份小于10,要对月份数据用 0 进行补全,否则不用补全。
原文:https://www.cnblogs.com/hzozj/p/11770126.html