在javascript开发中,我们会遇到日期时间格式化的问题,一般而言,默认我们都是 采用yyyy-MM-dd hh:mm:ss这样的格式,简单的做法就是获取时间的各个字段,年、月、日、时、分、秒,然后通过字符串拼接的方式组成这样的日期时间格式,当月份,日期,小时,分钟,秒数不足10的时候,前面补充0来达到这样的目的。但是一般而言,这种格式化方式比较死板,当我们更换一种格式化方式的时候,就需要重写一个函数。
这里给出一个通过正则来实现日期格式化的例子,它的思路很巧妙,利用一个map映射,存放月、日、时、分、秒,然后依次通过字符替换的方式,将格式化表达式替换为年月日时分秒的表达式,最后还需要算上年的替换。
测试代码如下,这个方法只需要修改格式化表达式就可以达到日期格式化目的了。
var Utils = {
formatDate:function(time,format){
var date = new Date(time);
var map ={
'M' : date.getMonth()+1,//month
'd' : date.getDate(),//date
'h' : date.getHours(),//hours
'm' : date.getMinutes(),//minutes
's' : date.getSeconds() //seconds
};
format = format.replace(/([yMdhms])+/g,function(all,t){
var v = map[t];
if(v!=undefined){
if(all.length>1){
v = '0'+v;
v = v.substr(v.length-2);
}
return v;
}else if(t=='y'){
return (date.getFullYear()+'').substr(4-all.length);
}
return all;
});
return format;
}
};
console.log(Utils.formatDate(new Date().getTime(),'yyyy年MM月dd日hh:mm:ss'))
console.log(Utils.formatDate(new Date().getTime(),'yyyy-MM-dd/hh:mm:ss'))
console.log(Utils.formatDate(new Date().getTime(),'yyyy-MM-dd hh:mm:ss'))
运行结果如下: