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