正则表达式在日期处理的一个应用
最近在翻看原来写的工具函数中,发现了 函数功能
formatDate(new Date(),'yy-mm-dd') // 18-05-13 formatDate(new Date(),'yyyy-MM-dd hh:mm') // "2018-05-13 16:35" 当然也可以把函数挂载在 实现思路实现思路比较简单,就是利用,
formatDate(new Date(),'yyyy-M-dd') // "2018-5-13" formatDate(new Date(),'yyyy-MM-dd') // "2018-05-13"
实现过程因为需要支持各种组合,所以需要一个对象将个部分存储下来,根据参数的格式能够快速的解析出来对应的值。对象的格式大致如下 var cfg = { yyyy: date.getFullYear(),// 年 : 4位 yy: date.getFullYear().toString().substring(2),// 年 : 2位 M: date.getMonth() + 1,// 月 : 如果1位的时候不补0 MM: paddNum(date.getMonth() + 1),// 月 : 如果1位的时候补0 d: date.getDate(),// 日 : 如果1位的时候不补0 dd: paddNum(date.getDate()),// 日 : 如果1位的时候补0 hh: paddNum(date.getHours()),// 时 mm: paddNum(date.getMinutes()),// 分 ss: paddNum(date.getSeconds()) // 秒 } 双位补0单位不补0,补0的过程封装成一个函数 let paddNum = num => { if (/^d$/.test(num)) { return '0' + num } return num } 不过还可以使用字符串提供的正则表达式 let paddNum = num => num.toString().replace(/^(d)$/,'0$1') 这样每个日期的数据处理部分就做完了。 format.replace(/([a-z])(1)*/ig,m => cfg[m]) 整合稍作整理,这个工具函数就组合起来了 const formatDate = (date=new Date(),format='yyyy-MM-dd hh:mm:ss') => { // 单位补0 let paddNum = num => num.toString().replace(/^(d)$/,'0$1') // 指定格式字符 var cfg = { yyyy: date.getFullYear(),// 日 : 如果1位的时候补0 h: date.getHours(),// 时 hh: paddNum(date.getHours()),// 分 ss: paddNum(date.getSeconds()) // 秒 } return format.replace(/([a-z])(1)*/ig,m => cfg[m]) } 可以看出用好正则表达式的捕获组,可以大大简化代码量,逻辑看上去也很清楚。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |