本文介绍了一种通过扩展 JavaScript Date 原型来实现日期格式化的方法。该方法支持年、月、日、时、分、秒、毫秒及星期等多占位符,通过正则替换生成指定格式的字符串。文中提供了完整的 pattern 函数代码及多个调用示例,适用于需要自定义日期显示格式的前端场景。
JavaScript Date 格式化扩展方法详解
代码实现如下:
/**
此方法对 Date 对象进行了扩展,旨在将 Date 实例转换为符合特定格式要求的字符串。
在格式字符串中,月份(M)、日期(d)、12小时制小时(h)、24小时制小时(H)、分钟(m)、秒(s)、星期(E)以及季度(q)均支持使用1到2个占位符。
年份(y)允许使用1至4个占位符,而毫秒(S)仅支持单个占位符,且该占位符需对应1至3位的数字。
以下是具体的使用示例:
(new Date()).pattern("yyyy-MM-dd hh:mm:ss.S") 的输出结果为 2006-07-02 08:09:04.423。
(new Date()).pattern("yyyy-MM-dd E HH:mm:ss") 的输出结果为 2009-03-10 二 20:09:04。
(new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") 的输出结果为 2009-03-10 周二 08:09:04。
(new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss") 的输出结果为 2009-03-10 星期二 08:09:04。
(new Date()).pattern("yyyy-M-d h:m:s.S") 的输出结果为 2006-7-2 8:9:4.18。
*/
Date.prototype.pattern=function(fmt) {
var o = {
"M+" : this.getMonth()+1, //月份
"d+" : this.getDate(), //日
"h+" : this.getHours()%12 == 0 ? 12 : this.getHours()%12, //小时
"H+" : this.getHours(), //小时
"m+" : this.getMinutes(), //分
"s+" : this.getSeconds(), //秒
"q+" : Math.floor((this.getMonth()+3)/3), //季度
"S" : this.getMilliseconds() //毫秒
};
var week = {
"0" : "/u65e5",
"1" : "/u4e00",
"2" : "/u4e8c",
"3" : "/u4e09",
"4" : "/u56db",
"5" : "/u4e94",
"6" : "/u516d"
};
if(/(y+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
}
if(/(E+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "/u661f/u671f" : "/u5468") : "")+week[this.getDay()+""]);
}
for(var k in o){
if(new RegExp("("+ k +")").test(fmt)){
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
}
}
return fmt;
}
var date = new Date();
window.alert(date.pattern("yyyy-MM-dd hh:mm:ss"));