我传入的fmt=yyyy-MM-dd hh:mm:ss ,date是我数据库的数据
function dateFtt(fmt, date) {
var o = {
"M+": date.getMonth() + 1, //月份 ,js是从0开始的
"d+": date.getDate(), //日
"h+": date.getHours(), //小时
"m+": date.getMinutes(), //分
"s+": date.getSeconds(), //秒
"q+": Math.floor((date.getMonth() + 3) / 3), //季度
"S": date.getMilliseconds() //毫秒
};
//这个地方的y需要跟自己代码中的格式匹配,substring(int beginIndex, int endIndex)
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
}
for (var k in o) { //substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。
if (new RegExp('(' + k + ')').test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)))
}
}
return fmt;
}
知识点说明:1、(y+)去匹配我fmt中的 yyyy,正则表达式中() 代表一个表达式,+是指多个字符
2、RegExp.$1是RegExp的一个属性,指的是与正则表达式匹配的第一个 子匹配(以括号为标志)的字符串
3、for(var k in o) 代表以k 在 o中遍历,根据fmt得知,会遍历到 M+ 和 d+ 两个元素,之后去fmt中匹配并格式化,最后输出
4、substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。