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