关于JavaScript中Date对象字符串格式化的说明

一、定义Date对象字符串格式化方法:

// 定义全局的Date对象字符串格式化方法
(function (window, undefined) {
    // 判断Date对象字符串格式化方法是否已经定义
    if (typeof (window.dateFormat) == "function") {
        return;
    }
    /**
    * date:需要格式化的Date对象
    * format:格式化规则
    * return:Date对象格式化后的字符串
    */
    window.dateFormat = function (date, format) {
        var o = {
            "M+": date.getMonth() + 1,
            "d+": date.getDate(),
            "H+": date.getHours(),
            "m+": date.getMinutes(),
            "s+": date.getSeconds(),
            "q+": Math.floor((date.getMonth() + 3) / 3),
            "S": date.getMilliseconds()
        };
        if (/(y+)/.test(format)) {
            format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
        }
        for (var k in o) {
            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;
    };
})(window);

二、可以同时将字符串格式化方法绑定到Date的原型上:

// 绑定字符串格式化方法到Date的原型上
Date.prototype.format = function (format) {
    return dateFormat(this, format);
};

这样的好处是可以直接通过调用Date实例对象的format方法来达到字符串格式化的效果。

三、参数说明:
date:需要格式化的Date实例对象,当使用原型方法时,直接传递Date的实例对象。

format:格式化规则,取值为字符“y(年)”、“M(月)”、“d(日)”、“H(时)”、“m(分)”、“s(秒)”、“q(季度)”、“S(毫秒)”和其他需要直接显示的字符的组合。其中字符“y”、“M”、“d”、“H”、“m”、“s”、“q”可迭代出现,并且除“y”字符最多可迭代4位外,其他字符最多可迭代2位。当“y”迭代出现时格式化为年份的精度,即“yyyy”表示4位年份,“yy”则表示两位年份;当其他字符迭代出现并且格式化后的字符数未达到迭代数时,将会在格式化后的字符串前面补上缺少位数的“0”字符,如1月采用“M”规则时格式化为“1”,而采用“MM”规则时则格式化为“01”。字符“S”无迭代,单一出现,代表3位毫秒数。

四、调用示例:

// 创建Date对象
var date = new Date();
// 调用全局方法
var format1 = dateFormat(date, "yyyy-MMM-dd"); // 结果:2016-01-11
var format2 = dateFormat(date, "yy-M-d H:m:s.S"); // 结果:16-1-11 8:9:59.456
// 调用原型方法
var format3 = date.format("yyyy/MM/dd HH:mm:ss"); // 结果:2016/01/11 08:09:59
var format4 = date.format("yyyy年q季度"); // 结果:2016年1季度

发表评论