meizz的javascript日期格式化函数很好用
原帖请见:http://blog.youkuaiyun.com/meizz/article/details/405708
Date.prototype.format = function(format) //author: meizz
{
var o = {
"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()+"").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;
}
alert(new Date().format("yyyy-MM-dd hh:mm:ss"));
代码写得很精妙,主要使用了正则和replace,我简单地做了一些增强和改写,
主要用了replace 函数来代替RegExp.$1
增加了24小时表示法的H
原来的h变成12小时制
增加了E代表星期,当然可以再扩展
/*
字母 日期或时间元素 表示 示例
G Era 标志符 Text AD
y 年 Year 1996; 96
M 年中的月份 Month July; Jul; 07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) Number 24
K am/pm 中的小时数(0-11) Number 0
h am/pm 中的小时数(1-12) Number 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
Z 时区 RFC 822 time zone -0800
*/
String.prototype.repeat = function(count, seperator) {
var seperator = seperator || '';
var a = new Array(count);
for (var i = 0; i < count; i++){
a[i] = this;
}
return a.join(seperator);
}
Date.prototype.format = function(style) {
var o = {
"y{4}|y{2}" : this.getFullYear(), //year
"M{1,2}" : this.getMonth() + 1, //month
"d{1,2}" : this.getDate(), //day
"H{1,2}" : this.getHours(), //hour
"h{1,2}" : this.getHours() % 12, //hour
"m{1,2}" : this.getMinutes(), //minute
"s{1,2}" : this.getSeconds(), //second
"E" : this.getDay(), //day in week
"q" : Math.floor((this.getMonth() + 3) / 3), //quarter
"S{3}|S{1}" : this.getMilliseconds() //millisecond
}
for(var k in o ){
style = style.replace(new RegExp("("+ k +")"), function(m){
return ("0".repeat(m.length) + o[k]).substr(("" + o[k]).length);
})
}
return style;
};
document.write(new Date().format('yyyy-MM-dd Qq WE h:mm:ss SSS'));
代码貌似少了一点。
replace函数的功能很强大,从下面这个简单的例程中学习一下:
String.prototype.format = function(){
var args = arguments;
return this.replace(/\{(\d+)\}/g,
function(m,i){
return args[i];
});
}
var a = "I Love {0}, and You Love {1},Where are {0}! {4}";
alert(a.format("You","Me"));
stringObj.replace参数
第一个参数为正则
第二个参数可以是文本,这个很简单,也可以是function,这个就强大了。
这个function 的参数是动态的,有多少个参数呢,m+3呢,m是多少呢,是正则中左括号的个数,如果有一个左括号,那么就有1+3=4个参数
所以最少有3个参数了。
参数1:匹配的子字符串
参数2:查找中捕获的全部结果(往往和第一个相同,如果()在最外面的话)
参数3:查找中捕获的全部结果
..........:查找中捕获的全部结果
参数m+2:在 stringObj 中匹配出现的偏移量
参数m+3:stringObj 本身
这么一讲,很通俗易懂了。
更新:2012/12/13,替换混淆字符串:
var o = "sina"; //原字符串
var re = /s(.+)i(.+)n(.+)a(.+)/g; //原字符串正则
var s = "svserinfonoaction"; //混淆后的字符串
//alert(re.test(s));
var r = s.replace(re,
function(){
var t = arguments[0];
for (var i = 0; i < o.length; i++) {
t = t.replace(arguments[i + 1], "");
}
return t;
});
document.write(r);
这儿有更详细的参考:
http://www.blogjava.net/pingpang/archive/2012/08/12/385342.html