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>


...全文
66 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dgnApo 2003-05-14
  • 打赏
  • 举报
回复
感谢!!!!!
emu 2003-05-14
  • 打赏
  • 举报
回复
呵呵,没注意到Wednesday有个W在里面。
seabell 2003-05-14
  • 打赏
  • 举报
回复
emu又有精品推出了,收藏!!!:)

一个小地方(W替换的先后顺序)完善了一下
<!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();
var sMonth = ["January","February","March","April","May","June","July","August","September","October","November","December"][month];
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).getDay())/7);
return format.replace("yyyy",year).replace("yy",year.toString().substr(2)).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("W",weekInMonth).replace("F",Math.ceil(date/7)).replace(/E/g,["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][day]).replace("D",daysInYear).replace("w",weekInYear).replace(/MMMM+/,sMonth).replace("MMM",sMonth.substring(0,3)).replace("MM",(month<9?"0":"")+(month+1));
}

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周,MMMM这个月的第W周,MMM这个月的第F个E"));
//-->
</SCRIPT>
</BODY>
</HTML>
emu 2003-05-13
  • 打赏
  • 举报
回复
因为烦琐啊。做出来了就帖出来,下回别人就不用再发明轮子了。
fason 2003-05-13
  • 打赏
  • 举报
回复
又有新东东出来了,造福人群啊
Reker熊 2003-05-13
  • 打赏
  • 举报
回复
赫赫,emu

你怎麼老喜歡搞這些東西
emu 2003-05-13
  • 打赏
  • 举报
回复
呵呵,M和F规则也实现了:

Date.prototype.format = function (format){
if (format == null) format = "yyyy/MM/dd HH:mm:ss.SSS";
var year = this.getFullYear();
var month = this.getMonth();
var sMonth = ["January","February","March","April","May","June","July","August","September","October","November","December"][month];
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).getDay())/7);
return format.replace("yyyy",year).replace("yy",year.toString().substr(2)).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).replace(/MMMM+/,sMonth).replace("MMM",sMonth.substring(0,3)).replace("MM",(month<9?"0":"")+(month+1)).replace("F",Math.ceil(date/7));
}
emu 2003-05-13
  • 打赏
  • 举报
回复
说明一下:

function Date.prototype.format(format) 这个写法其实不规范,

Date.prototype.format = function (format)才是ie、ns和moz通用的写法。

所以上面用了后者。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧