一、定义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季度