格式化日期的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"    // 六
    };    
if(/(E+)/.test(format)){     
        format=format.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "\u661f\u671f" : "\u5468") : "")+week[this.getDay()+""]);     
    }    
posted on 2013-11-15 22:21  快鸟  阅读(1078)  评论(0编辑  收藏  举报