javascript对日期处理的常用方法类
<
script language
=
"
JavaScript
"
>
<!--
//
程序:常用公历日期处理程序
/**//*
用相对不规则的字符串来创建日期对象,不规则的含义为:顺序包含年月日三个数值串,有间隔
*/
String.prototype.parseDate
=
function
(){
var
ar
=
(
this
+
"
,0,0,0
"
).match(
/
\d+
/
g);
return
ar[
5
]
?
(
new
Date(ar[
0
],ar[
1
]
-
1
,ar[
2
],ar[
3
],ar[
4
],ar[
5
])):(
new
Date());
}
/**//*
* 功能:根据输入表达式返回日期字符串
* 参数:dateFmt:字符串,由以下结构组成
* yy:长写年,YY:短写年mm:数字月,MM:英文月,dd:日,hh:时,
* mi:分,ss秒,ms:毫秒,we:汉字星期,WE:英文星期.
* isFmtWithZero : 是否用0进行格式化,true or false
* 返回:对应日期的中文字符串
*/
Date.prototype.toString
=
function
(dateFmt,isFmtWithZero){
dateFmt
=
(dateFmt
==
null
?
"
yy-mm-dd hh:mi:ss
"
: dateFmt);
if
(
typeof
(dateFmt)
!=
"
string
"
)
throw
(
new
Error(
-
1
,
'
toString()方法的第一个参数为字符串类型!
'
));
isFmtWithZero
=
!!
isFmtWithZero;
var
weekArr
=
[[
"
日
"
,
"
一
"
,
"
二
"
,
"
三
"
,
"
四
"
,
"
五
"
,
"
六
"
],[
"
SUN
"
,
"
MON
"
,
"
TUR
"
,
"
WED
"
,
"
THU
"
,
"
FRI
"
,
"
SAT
"
]];
var
monthArr
=
[
"
JAN
"
,
"
FEB
"
,
"
MAR
"
,
"
APR
"
,
"
MAY
"
,
"
JUN
"
,
"
JUL
"
,
"
AUG
"
,
"
SEP
"
,
"
OCT
"
,
"
NOV
"
,
"
DEC
"
];
var
str
=
dateFmt;
var
o
=
{
"
yy
"
:
this
.getFullYear(),
"
YY
"
:
this
.getYear(),
"
mm
"
:
this
.getMonth()
+
1
,
"
MM
"
: monthArr[
this
.getMonth()],
"
dd
"
:
this
.getDate(),
"
hh
"
:
this
.getHours(),
"
mi
"
:
this
.getMinutes(),
"
ss
"
:
this
.getSeconds(),
"
we
"
:
"
星期
"
+
weekArr[
0
][
this
.getDay()],
"
WE
"
: weekArr[
1
][
this
.getDay()]
}
for
(
var
i
in
o){
str
=
str.replace(
new
RegExp(i,
"
g
"
),o[i].toString().fmtWithZero(isFmtWithZero));
}
str
=
str.replace(
/
ms
/
g,
this
.getMilliseconds().toString().fmtWithZeroD(isFmtWithZero));
return
str;
}
/**//*
将一位数字格式化成两位,如: 9 to 09
*/
String.prototype.fmtWithZero
=
function
(isFmtWithZero){
return
(isFmtWithZero
&&
/
^\d$
/
.test(
this
))
?
"
0
"
+
this
:
this
;
}
String.prototype.fmtWithZeroD
=
function
(isFmtWithZero){
return
(isFmtWithZero
&&
/
^\d{2}$
/
.test(
this
))
?
"
00
"
+
this
:((isFmtWithZero
&&
/
^\d$
/
.test(
this
))
?
"
0
"
+
this
:
this
);
}
/**//*
功能 : 返回与某日期相距N天(N个24小时)的日期
* 参数 : num number类型 可以为正负整数或者浮点数,默认为1;
* type 0(秒) or 1(天),默认为天
* 返回 : 新的Date对象
*/
Date.prototype.dateAfter
=
function
(num,type){
num
=
(num
==
null
?
1
:num);
if
(
typeof
(num)
!=
"
number
"
)
throw
new
Error(
-
1
,
"
dateAfterDays(num,type)的num参数为数值类型.
"
);
type
=
(type
==
null
?
1
:type);
var
arr
=
[
1000
,
86400000
];
return
new
Date(
this
.valueOf()
+
num
*
arr[type]);
}
//
判断是否是闰年,返回true 或者 false
Date.prototype.isLeapYear
=
function
(){
var
year
=
this
.getFullYear();
return
(
0
==
year
%
4
&&
((year
%
100
!=
0
)
||
(year
%
400
==
0
)));
}
//
返回该月天数
Date.prototype.getDaysOfMonth
=
function
(){
return
(
new
Date(
this
.getFullYear(),
this
.getMonth()
+
1
,
0
)).getDate();
}
//
日期比较函数,参数date:为Date类型,如this日期晚于参数:1,相等:0 早于: -1
Date.prototype.dateCompare
=
function
(date){
if
(
typeof
(date)
!=
"
object
"
||
!
(
/
Date
/
.test(date.constructor)))
throw
new
Error(
-
1
,
"
dateCompare(date)的date参数为Date类型.
"
);
var
d
=
this
.getTime()
-
date.getTime();
return
d
>
0
?
1
:(d
==
0
?
0
:
-
1
);
}
/**//*
功能:返回两日期之差
*参数:pd PowerDate对象
* type: 返回类别标识.yy:年,mm:月,ww:周,dd:日,hh:小时,mi:分,ss:秒,ms:毫秒
* intOrFloat :返回整型还是浮点型值 0:整型,不等于0:浮点型
* output : 输出提示,如:时间差为#周!
*/
Date.prototype.calDateDistance
=
function
(date,type,intOrFloat,output){
if
(
typeof
(date)
!=
"
object
"
||
!
(
/
Date
/
.test(date.constructor)))
throw
new
Error(
-
1
,
"
calDateDistance(date,type,intOrFloat)的date参数为Date类型.
"
);
type
=
(type
==
null
?
'
dd
'
:type);
if
(
!
((
new
RegExp(type
+
"
,
"
,
"
g
"
)).test(
"
yy,mm,ww,dd,hh,mi,ss,ms,
"
)))
throw
new
Error(
-
1
,
"
calDateDistance(pd,type,intOrFloat,output)的type参数为非法.
"
);
var
iof
=
(intOrFloat
==
null
?
0
:intOrFloat);
var
num
=
0
;
var
o
=
{
"
ww
"
:
7
*
86400000
,
"
dd
"
:
86400000
,
"
hh
"
:
3600000
,
"
mi
"
:
60000
,
"
ss
"
:
1000
,
"
ms
"
:
1
}
switch
(type){
case
"
yy
"
: num
=
this
.getFullYear()
-
date.getFullYear();
break
;
case
"
mm
"
: num
=
(
this
.getFullYear()
-
date.getFullYear())
*
12
+
this
.getMonth()
-
date.getMonth();
break
;
default
:
var
sub
=
this
.valueOf()
-
date.valueOf();
if
(o[type])
num
=
(sub
/
o[type]).fmtRtnVal(iof);
break
;
}
return
(output
?
output.replace(
/
#
/
g,
"
"
+
num
+
"
"
) : num);
}
//
返回整数或者两位小数的浮点数
Number.prototype.fmtRtnVal
=
function
(intOrFloat){
return
(intOrFloat
==
0
?
Math.floor(
this
) : parseInt(
this
*
100
)
/
100);
}
//
根据当前日期所在年和周数返回周日的日期
Date.prototype.RtnByWeekNum
=
function
(weekNum){
if
(
typeof
(weekNum)
!=
"
number
"
)
throw
new
Error(
-
1
,
"
RtnByWeekNum(weekNum)的参数是数字类型.
"
);
var
date
=
new
Date(
this
.getFullYear(),
0
,
1
);
var
week
=
date.getDay();
week
=
(week
==
0
?
7
:week);
return
date.dateAfter(weekNum
*
7
-
week,
1
);
}
//
根据日期返回该日期所在年的周数
Date.prototype.getWeekNum
=
function
(){
var
dat
=
new
Date(
this
.getFullYear(),
0
,
1
);
var
week
=
dat.getDay();
week
=
(week
==
0
?
7
:week);
var
days
=
this
.calDateDistance(dat,
"
dd
"
)
+
1
;
return
((days
+
6
-
this
.getDay()
-
7
+
week)
/
7);
}
//
-->
<
/
script>
<
script language
=
"
JavaScript
"
>
<!--
var
dw
=
document.write;
var
date2
=
"
2005-12-30
"
.parseDate();
dw(date2,
"
<br>
"
);
var
date3
=
"
2006-1-10 11 11 11
"
.parseDate();
dw(date2.calDateDistance(date3,
null
,
null
,
"
时间差为#天!
"
));
//
alert(new Date(2000,2,-29));
//
-->
<
/
script>