script 版的日期格式函数
emu 2003-05-13 08:30:01 参考了jdk文档中的SimpleDateFormat类做的。实现了一下规则:
Symbol Meaning Presentation Example
------ ------- ------------ -------
G era designator (Text) AD
y year (Number) 1996
M month in year (Number) 07
d day in month (Number) 10
h hour in am/pm (1~12) (Number) 12
H hour in day (0~23) (Number) 0
m minute in hour (Number) 30
s second in minute (Number) 55
S millisecond (Number) 978
E day in week (Text) Tuesday
D day in year (Number) 189
w week in year (Number) 27
W week in month (Number) 2
a am/pm marker (Text) PM
k hour in day (1~24) (Number) 24
K hour in am/pm (0~11) (Number) 0
没有实现的规则是:
M month in year (Text & Number) July & 07
F day of week in month (Number) 2 (2nd Wed in July)
z time zone (Text) Pacific Standard Time
' escape for text (Delimiter)
'' single quote (Literal) '
M规则和F规则不难,但是看的不是很明白到底要来什么结果,所以只部分实现了M。
z规则不知怎么实现。用getTimezoneOffset()的话好像要再找个时区列表后进行映射,太麻烦,算了。
'和''规则要用正则,而且需要考虑到的情况太多,也算了。
所以最后还是留点东西,给后来者完善吧。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>emu's date simple date formatter</TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="emu">
<META NAME="Keywords" CONTENT="date formatter format emu">
<META NAME="Description" CONTENT="A function to format Date object into String">
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
Date.prototype.format = function (format){
if (format == null) format = "yyyy/MM/dd HH:mm:ss.SSS";
var year = this.getFullYear();
var month = this.getMonth()+1;
var date = this.getDate();
var day = this.getDay();
var hr = this.getHours();
var min = this.getMinutes();
var sec = this.getSeconds();
var daysInYear = Math.ceil((this-new Date(year,0,0))/86400000);
var weekInYear = Math.ceil((daysInYear+new Date(year,0,1).getDay())/7);
var weekInMonth = Math.ceil((date+new Date(year,month-1,1).getDay())/7);
return format.replace("yyyy",year).replace("yy",year.toString().substr(2)).replace("MM",(month<10?"0":"")+month).replace("dd",(date<10?"0":"")+date).replace("HH",(hr<10?"0":"")+hr).replace("KK",(hr%12<10?"0":"")+hr%12).replace("kk",(hr>0&&hr<10?"0":"")+(((hr+23)%24)+1)).replace("hh",(hr>0&&hr<10||hr>12&&hr<22?"0":"")+(((hr+11)%12)+1)).replace("mm",(min<10?"0":"")+min).replace("ss",(sec<10?"0":"")+sec).replace("SSS",this%1000).replace("a",(hr<12?"AM":"PM")).replace("E",["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][day]).replace("D",daysInYear).replace("w",weekInYear).replace("W",weekInMonth);
}
var d = new Date();
alert(d.format());//default format
alert(d.format("MM-dd-yyyy"));
alert(d.format("dd/MM/yy"));
alert(d.format("dd\\MM\\yyyy HH:mm ss.SSS"));
alert(d.format("yyyy年MM月dd日 HH时mm分ss.SSS秒"));
alert(d.format("yyyy年MM月dd日 E HH(0~23)时mm分ss.SSS秒"));
alert(d.format("yyyy年MM月dd日 E KK(0~11)时mm分ss.SSS秒 a"));
alert(d.format("yyyy年MM月dd日 E hh(1~12)时mm分ss.SSS秒 a"));
alert(d.format("yyyy年MM月dd日 E kk(1~24)时mm分ss.SSS秒 今年的第D天,第w周 这个月的第W周"));
//-->
</SCRIPT>
</BODY>
</HTML>