利用正则在String原型上添加一个方法:把指定时间格式的字符串换成我们想要的各种格式,例如我们有时需要把“2016-12-22 03:10:00”或者“2016/12/22 03:10:00”等时间字符串换成我们想要的2016年12月22日 3时10分0秒等形式展示出来,那么利用正则以及String中的replace方法来实现是个简便而又实用的方法
代码如下
String.prototype.myFormatTime = function (){
var reg = /^(\d{4})(?:-|\/|\.|:)(\d{1,2})(?:-|\/|\.|:)(\d{1,2})(?:\s+)(\d{1,2})(?:-|\/|\.|:)(\d{1,2})(?:-|\/|\.|:)(\d{1,2})$/g;
var arr = [];
this.replace(reg, function (){
arr = ([].slice.call(arguments)).slice(1,7);
});
var format = arguments[0] || "{0}年{1}月{2}日 {3}:{4}:{5}";
return format.replace(/{(\d+)}/g,function (){
var val = arr[arguments[1]];
return val.length === 1 ? "0" + val : val;
});
}
让我们来试一下这个方法
var str1 = "2016-12-22 03:29:35",str2 = "2016/12/22 3:29:35",str3 = "2016.12.22 3.29.35";
console.log(str1.myFormatTime("{0}年{1}月{2}日 {3}时{4}分{5}秒")); //这里输出的是2016年12月22日 03时29分35秒
console.log(str2.myFormatTime("{1}月{2}日 {3}时{4}分")); //这里输出的是12月22日 03时29分
console.log(str3.myFormatTime("{1}月{2}日 {3}时{4}分")); //这里输出的同样是12月22日 03时29分
需要注意的是当replace方法的第二个参数是一个函数的时候,函数中arguments这个类数组中存放了哪几项,以及如何把我们所需要的项提取到一个数组中。
this.replace(reg, function (){
console.log(arguments);//输出arguments为["2016-12-22 03:29:35", "2016", "12", "22", "03", "29", "35", 0, "2016-12-22 03:29:35"],可以看到第2到第7项是我们所需要的,也就是索引1到索引6的项
arr = ([].slice.call(arguments)).slice(1,7);//借用数组中的slice方法将我们需要的项复制到一个新的数组中,这里需要注意slice传两个参数时是从索引1开始到索引7但是不包含索引7,这里千万不要写成6
});