知识点
1. 正则表达式
例:/y+/i:
y+ 表示匹配一个或多个 y 字符。
i 是一个修饰符,指示这个匹配是不区分大小写的。
2.test(format)
test() 方法用于测试字符串 format 是否包含与正则表达式匹配的部分。如果匹配成功,返回 true,否则返回 false。
3.replace()
例:format.replace(‘-’,‘月’)
是用于将匹配到的 - 字符替换为一个新的值’月‘。
4.RegExp
例:
RegExp.$1 是正则表达式中第一个捕获组的内容。在这种情况下,它指的是一个或多个连续的 字符。
5.substr()
例:str.substr(2,4) 截取字符串,从第2个开始到第4结束,若第2个参数没有,则截取到字符串的末尾
6.padStart()
例:
padStart(2, ‘0’)
用于在字符串的开头填充指定的字符,以达到指定的长度。
2 表示目标字符串的最小长度。
‘0’ 是用来填充的字符。
完整代码
function formatDateAuto(dt, format = 'yyyy-MM-dd HH:mm:ss'){
let date = new Date(dt);
let year = date.getFullYear();
let month = String(date.getMonth() + 1).padStart(2, '0');
let day = String(date.getDate()).padStart(2, '0');
let hour = String(date.getHours()).padStart(2, '0');
let minute = String(date.getMinutes()).padStart(2, '0');
let second = String(date.getSeconds()).padStart(2, '0');
let obj = {
'M+': month, // 月份
'd+': day, // 日
'h+': hour, // 小时
'm+': minute, // 分
's+': second, // 秒
// 'yyyy': year, // 年份
'MM': month,
'dd': day,
'HH': hour,
'mm': minute,
'ss': second
};
if(/(y+)/i.test(format)){
console.log(RegExp.$1)
format=format.replace(RegExp.$1,(date.getFullYear()+'').substr(4 - RegExp.$1.length))
}
for (let k in obj) {
if (new RegExp(`(${k})`).test(format)) {
// || RegExp.$1.length === 4
format = format.replace(RegExp.$1, (RegExp.$1.length === 1 ) ? (obj[k]) : (('00' + obj[k]).substr(('' + obj[k]).length)));
}
}
return format;
}