JS⽇期格式化--使⽤正则
//采⽤正则格式化⽇期
function dateFormat(fmt, date) {
let ret;
let opt = {
"Y+": FullYear().toString(), // 年
"m+": (Month() + 1).toString(), // ⽉
"d+": Date().toString(), // ⽇
"H+": Hours().toString(), // 时
"M+": Minutes().toString(), // 分
"S+": Seconds().toString() // 秒
/
/ 有其他格式化字符需求可以继续添加,必须转化成字符串
};
for (let k in opt) {
let reg = new RegExp("(" + k + ")");
ret = (fmt);
console.log(reg);
js获取子元素 console.log(ret);
if (ret) {
fmt = place(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
};
};
return fmt;
}
这个原理是先构建⼀个对象,保存正则需要的表达式的内容,如Y+,m+等等,Y表⽰的是年份,所以对应的value是年份,以此类推其他⽉、天等。
然后利⽤for in循环遍历对象,利⽤key⽣成正则对象,⽐如 opt对象的 “S+”这个属性的key,构造出的正则表达式/(S+)/,如下图:
之后使⽤exec⽅法去匹配传的格式字符串,exec()⽅法匹配成功,返回⼀个数组对象,如下图:
返回结果:数组元素、index和input两个属性
数组元素:第0个是正则表达式匹配到的所有的字符串;第1个元素是正则表达式第1个⼦表达式匹配到的字符串(如果有);第2个元素是正则表达式第2个⼦表达式匹配到的字符串(如果有),之后的依此类推......,如下:
因此在上⾯格式化时间时,遍历⽣成正则表达式,匹配,通过replace⽅法使⽤date获取的值替换fmt字符串内匹配到的内容,即依次匹配到fmt内表⽰年份、⽉份、天等的字符串,使⽤对应的年、⽉、⽇去替换。
exec()⽅法匹配不成功返回null。
采⽤test⽅法时,匹配成功返回的是true,失败返回false。
RegExp
⽆论采⽤哪种⽅式都可以使⽤RegExp对象,
如果成功RegExp.$1返回匹配到的字符串,⽐如/(m+)/匹配到mm。$0 $2都会返回"",空字符串。
padStart
padStart(len,str) :该⽅法⽤于补全字符串
len:补全长度
str:补充的字符串,使⽤这个字符串补充。
fmt = place(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 进⾏补全,否则不⽤补全。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论