网上有很多格式化日期的函数,你会用,但你真的知道它的原理吗?
// 输入:time, fmt。fmt输入例子:'yyyy-MM-dd'或者‘yyyy年MM月dd天’或者'mm:ss'const formatDate = (time, fmt) => {// 转成日期对象const date = new Date(time);// 由于年一般是4位,我们先特殊处理if (/(y+)/.test(fmt)) {// 使用正则表达式匹配y的部分fmt = fmt.replace(RegExp.$1, // RegExp.$1记录着我们正则表达式括号包含的匹配部分// 获取年份,转成日期,看有多少个y,就截取多少位的年(date.getFullYear() + '').substr(4 - RegExp.$1.length) // );}// 处理2位的日期const obj = {// 之所以用M+,d+这种来当属性名,是因为这样可以把他们当作正则表达式来使用'M+': date.getMonth() + 1,'d+': date.getDate(),'h+': date.getHours(),'m+': date.getMinutes(),'s+': date.getSeconds(),};// 循环遍历objfor (let key in obj) {if (new RegExp(`(${key})`).test(fmt)) {fmt = fmt.replace(RegExp.$1, (obj[key] + '').padStart(2, '0')); // 这里和年那里替换差不多}}return fmt;};