格式化日期的js(正则魅力)
/** * 时间对象的格式化; */ Date.prototype.format = function(format) { // ◆ 使用prototype定义原型方法 /* * eg:format="YYYY-MM-dd hh:mm:ss"; */ var o = { // ◆ 键值对形式的数组。只能通过加强的for循环来迭代取值 "M+" :this.getMonth() + 1, // month "d+" :this.getDate(), // day "h+" :this.getHours(), // hour "m+" :this.getMinutes(), // minute "s+" :this.getSeconds(), // second "q+" :Math.floor((this.getMonth() + 3) / 3), // quarter (季度) "S" :this.getMilliseconds() // millisecond (毫秒) } if (/(y+)/.test(format)) { format = format.replace(RegExp.$1, (this.getFullYear() + "") // ◆ RegExp.$1 : 取正则表达式中第一个分组匹配到的内容 .substr(4 - RegExp.$1.length)); } for ( var k in o) { // ◆ 加强的for循环。k为键值对数组o中的键,故o[k]为对应的值 if (new RegExp("(" + k + ")").test(format)) { format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));// ◆ 这里的逻辑很好 } } return format; }
看下面效果:
需要星期的话,可以加上下面的代码
var week = {
"0" : "\u65e5", // 日
"1" : "\u4e00", // 一
"2" : "\u4e8c", // 二
"3" : "\u4e09", // 三
"4" : "\u56db", // 四
"5" : "\u4e94", // 五
"6" : "\u516d" // 六
};
"0" : "\u65e5", // 日
"1" : "\u4e00", // 一
"2" : "\u4e8c", // 二
"3" : "\u4e09", // 三
"4" : "\u56db", // 四
"5" : "\u4e94", // 五
"6" : "\u516d" // 六
};
if(/(E+)/.test(format)){
format=format.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "\u661f\u671f" : "\u5468") : "")+week[this.getDay()+""]);
}
format=format.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "\u661f\u671f" : "\u5468") : "")+week[this.getDay()+""]);
}