zoukankan
html css js c++ java
[收藏]Javascript关于日期的各种技巧和方法总结[欢迎补充]
<
script language
=
"
JavaScript
"
>
<!--
function
PowerDate(timeString)
{
this
.date
=
null
;
if
(timeString
!=
""
)
this
.date
=
new
Date(timeString);
else
this
.date
=
new
Date();
this
.isFmtZero
=
false
;
this
.weekArr
=
[[
"
星期日
"
,
"
星期一
"
,
"
星期二
"
,
"
星期三
"
,
"
星期四
"
,
"
星期五
"
,
"
星期六
"
],
[
"
SUN
"
,
"
MON
"
,
"
TUR
"
,
"
WED
"
,
"
THU
"
,
"
FRI
"
,
"
SAT
"
]];
this
.monthArr
=
[
"
JAN
"
,
"
FEB
"
,
"
MAR
"
,
"
APR
"
,
"
MAY
"
,
"
JUN
"
,
"
JUL
"
,
"
AUG
"
,
"
SEP
"
,
"
OCT
"
,
"
NOV
"
,
"
DEC
"
];
this
.getFullYear
=
function
()
{
return
this
.date.getFullYear();
}
;
this
.getYear
=
function
()
{
return
this
.date.getYear();
}
;
this
.getMonth
=
function
()
{
var
mm
=
this
.date.getMonth()
+
1
;
if
(
this
.isFmtZero
==
true
&&
mm
<
10
)
return
"
0
"
+
mm;
else
return
mm;
}
;
this
.getDay
=
function
()
{
var
dd
=
this
.date.getDate();
if
(
this
.isFmtZero
==
true
&&
dd
<
10
)
return
"
0
"
+
dd;
else
return
dd;
}
;
this
.getHour
=
function
()
{
var
hh
=
this
.date.getHours();
if
(
this
.isFmtZero
==
true
&&
hh
<
10
)
return
"
0
"
+
hh;
else
return
hh;
}
;
this
.getMinute
=
function
()
{
var
mi
=
this
.date.getMinutes();
if
(
this
.isFmtZero
==
true
&&
mi
<
10
)
return
"
0
"
+
mi;
else
return
mi;
}
;
this
.getSecond
=
function
()
{
var
ss
=
this
.date.getSeconds();
if
(
this
.isFmtZero
==
true
&&
ss
<
10
)
return
"
0
"
+
ss;
else
return
ss;
}
;
this
.getMillisecond
=
function
()
{
var
ss
=
this
.date.getMilliseconds();
if
(
this
.isFmtZero
==
true
&&
ss
<
10
)
return
"
00
"
+
ss;
else
if
(
this
.isFmtZero
==
true
&&
ss
<
100
)
return
"
0
"
+
ss;
else
return
ss;
}
;
this
.getWeek
=
function
()
{
return
this
.date.getDay();
}
;
this
.setIsFmtZero
=
function
(val)
{
this
.isFmtZero
=
val;
}
;
/**/
/*
功能:根据输入表达式返回日期字符串
参数:dateFmt:字符串,由以下结构组成 yy:长写年,YY:短写年mm:数字月,MM:英文月,dd:日,hh:时,mi:分,ss秒,ms:毫秒,we:汉字星期,WE:英文星期.
isFmtZero:布尔值,true:需要用0补位,false:不需要用0补位
*/
this
.getString
=
function
(dateFmt)
{
if
(
typeof
(dateFmt)
!=
"
string
"
)
throw
(
new
Error(
-
1
, 'getString()方法需要字符串类型参数
!
'));
var
str
=
dateFmt;
str
=
str.replace(
/
yy
/
g,
this
.getFullYear());
str
=
str.replace(
/
YY
/
g,
this
.getYear());
str
=
str.replace(
/
mm
/
g,
this
.getMonth());
str
=
str.replace(
/
MM
/
g,
this
.monthArr[
this
.getMonth()
-
1
]);
str
=
str.replace(
/
dd
/
g,
this
.getDay());
str
=
str.replace(
/
hh
/
g,
this
.getHour());
str
=
str.replace(
/
mi
/
g,
this
.getMinute());
str
=
str.replace(
/
ss
/
g,
this
.getSecond());
str
=
str.replace(
/
ms
/
g,
this
.getMillisecond());
str
=
str.replace(
/
we
/
g,
this
.weekArr[
0
][
this
.getWeek()]);
str
=
str.replace(
/
WE
/
g,
this
.weekArr[
1
][
this
.getWeek()]);
return
str;
}
;
//
返回N天前(后)的日期
//
返回与另一日期之间的时间间隔
//
}
PowerDate.prototype.fmtWithZero
=
function
()
{
}
var
d
=
new
PowerDate(
""
);
d.setIsFmtZero(
true
);
alert(d.getString(
"
yy-mm-dd hh:mi:ss.ms
"
));
//
-->
</
script
>
<
body
>
</
body
>
/**/
/*
******************************************
日期函数扩充
******************************************
*/
/**/
/*
===========================================
//转换成大写日期(中文)
===========================================
*/
Date.prototype.toCase
=
function
()
{
var
digits
=
new
Array('零','一','二','三','四','五','六','七','八','九','十','十一','十二');
var
unit
=
new
Array('年','月','日','点','分','秒');
var
year
=
this
.getYear()
+
""
;
var
index;
var
output
=
""
;
//
//////得到年
for
(index
=
0
;index
<
year.length;index
++
)
{
output
+=
digits[parseInt(year.substr(index,
1
))];
}
output
+=
unit[
0
];
//
/////得到月
output
+=
digits[
this
.getMonth()]
+
unit[
1
];
//
/////得到日
switch
(parseInt(
this
.getDate()
/
10
))
{
case
0
:
output
+=
digits[
this
.getDate()
%
10
];
break
;
case
1
:
output
+=
digits[
10
]
+
((
this
.getDate()
%
10
)
>
0
?
digits[(
this
.getDate()
%
10
)]:
""
);
break
;
case
2
:
case
3
:
output
+=
digits[parseInt(
this
.getDate()
/
10
)]
+
digits[
10
]
+
((
this
.getDate()
%
10
)
>
0
?
digits[(
this
.getDate()
%
10
)]:
""
);
default
:
break
;
}
output
+=
unit[
2
];
//
/////得到时
switch
(parseInt(
this
.getHours()
/
10
))
{
case
0
:
output
+=
digits[
this
.getHours()
%
10
];
break
;
case
1
:
output
+=
digits[
10
]
+
((
this
.getHours()
%
10
)
>
0
?
digits[(
this
.getHours()
%
10
)]:
""
);
break
;
case
2
:
output
+=
digits[parseInt(
this
.getHours()
/
10
)]
+
digits[
10
]
+
((
this
.getHours()
%
10
)
>
0
?
digits[(
this
.getHours()
%
10
)]:
""
);
break
;
}
output
+=
unit[
3
];
if
(
this
.getMinutes()
==
0
&&
this
.getSeconds()
==
0
)
{
output
+=
"
整
"
;
return
output;
}
//
/////得到分
switch
(parseInt(
this
.getMinutes()
/
10
))
{
case
0
:
output
+=
digits[
this
.getMinutes()
%
10
];
break
;
case
1
:
output
+=
digits[
10
]
+
((
this
.getMinutes()
%
10
)
>
0
?
digits[(
this
.getMinutes()
%
10
)]:
""
);
break
;
case
2
:
case
3
:
case
4
:
case
5
:
output
+=
digits[parseInt(
this
.getMinutes()
/
10
)]
+
digits[
10
]
+
((
this
.getMinutes()
%
10
)
>
0
?
digits[(
this
.getMinutes()
%
10
)]:
""
);
break
;
}
output
+=
unit[
4
];
if
(
this
.getSeconds()
==
0
)
{
output
+=
"
整
"
;
return
output;
}
//
/////得到秒
switch
(parseInt(
this
.getSeconds()
/
10
))
{
case
0
:
output
+=
digits[
this
.getSeconds()
%
10
];
break
;
case
1
:
output
+=
digits[
10
]
+
((
this
.getSeconds()
%
10
)
>
0
?
digits[(
this
.getSeconds()
%
10
)]:
""
);
break
;
case
2
:
case
3
:
case
4
:
case
5
:
output
+=
digits[parseInt(
this
.getSeconds()
/
10
)]
+
digits[
10
]
+
((
this
.getSeconds()
%
10
)
>
0
?
digits[(
this
.getSeconds()
%
10
)]:
""
);
break
;
}
output
+=
unit[
5
];
return
output;
}
/**/
/*
===========================================
//转换成农历
===========================================
*/
Date.prototype.toChinese
=
function
()
{
//
暂缺
}
/**/
/*
===========================================
//是否是闰年
===========================================
*/
Date.prototype.isLeapYear
=
function
()
{
return
(
0
==
this
.getYear()
%
4
&&
((
this
.getYear()
%
100
!=
0
)
||
(
this
.getYear()
%
400
==
0
)));
}
/**/
/*
===========================================
//获得该月的天数
===========================================
*/
Date.prototype.getDayCountInMonth
=
function
()
{
var
mon
=
new
Array(
12
);
mon[
0
]
=
31
; mon[
1
]
=
28
; mon[
2
]
=
31
; mon[
3
]
=
30
; mon[
4
]
=
31
; mon[
5
]
=
30
;
mon[
6
]
=
31
; mon[
7
]
=
31
; mon[
8
]
=
30
; mon[
9
]
=
31
; mon[
10
]
=
30
; mon[
11
]
=
31
;
if
(
0
==
this
.getYear()
%
4
&&
((
this
.getYear()
%
100
!=
0
)
||
(
this
.getYear()
%
400
==
0
))
&&
this
.getMonth()
==
2
)
{
return
29
;
}
else
{
return
mon[
this
.getMonth()];
}
}
/**/
/*
===========================================
//获得日期为星期几 (0为星期天)
===========================================
*/
Date.prototype.weekOfDay
=
function
()
{
return
this
.getDay();
}
/**/
/*
===========================================
//日期比较
===========================================
*/
Date.prototype.Compare
=
function
(objDate)
{
if
(
typeof
(objDate)
!=
"
object
"
&&
objDate.constructor
!=
Date)
{
return
-
2
;
}
var
d
=
this
.getTime()
-
objDate.getTime();
if
(d
>
0
)
{
return
1
;
}
else
if
(d
==
0
)
{
return
0
;
}
else
{
return
-
1
;
}
}
/**/
/*
===========================================
//格式化日期格式
===========================================
*/
Date.prototype.toString
=
function
()
{
if
(arguments.length
>
0
)
{
var
formatStr
=
arguments[
0
];
var
str
=
formatStr;
str
=
str.replace(
/
yyyy
|
YYYY
/
,
this
.getFullYear());
str
=
str.replace(
/
yy
|
YY
/
,(
this
.getFullYear()
%
100
)
>
9
?
(
this
.getFullYear()
%
100
).toString():
"
0
"
+
(
this
.getFullYear()
%
100
));
str
=
str.replace(
/
MM
/
,
this
.getMonth()
+
1
>
9
?
(
this
.getMonth()
+
1
).toString():
"
0
"
+
(
this
.getMonth()
+
1
));
str
=
str.replace(
/
M
/
g,(
this
.getMonth()
+
1
).toString());
str
=
str.replace(
/
dd
|
DD
/
,
this
.getDate()
>
9
?
this
.getDate().toString():
"
0
"
+
this
.getDate());
str
=
str.replace(
/
d
|
D
/
g,
this
.getDate());
str
=
str.replace(
/
hh
|
HH
/
,
this
.getHours()
>
9
?
this
.getHours().toString():
"
0
"
+
this
.getHours());
str
=
str.replace(
/
h
|
H
/
g,
this
.getHours());
str
=
str.replace(
/
mm
/
,
this
.getMinutes()
>
9
?
this
.getMinutes().toString():
"
0
"
+
this
.getMinutes());
str
=
str.replace(
/
m
/
g,
this
.getMinutes());
str
=
str.replace(
/
ss
|
SS
/
,
this
.getSeconds()
>
9
?
this
.getSeconds().toString():
"
0
"
+
this
.getSeconds());
str
=
str.replace(
/
s
|
S
/
g,
this
.getSeconds());
return
str;
}
else
{
return
this
.toLocaleString();
}
}
/**/
/*
===========================================
//由字符串直接实例日期对象
===========================================
*/
Date.prototype.instanceFromString
=
function
(str)
{
return
new
Date(str.replace(
/-/
g,
"
\/
"
));
}
/**/
/*
===========================================
//得到日期年月日等加数字后的日期
===========================================
*/
Date.prototype.dateAdd
=
function
(interval,number)
{
var
date
=
this
;
switch
(interval)
{
case
"
y
"
:
date.setFullYear(date.getFullYear()
+
number);
return
date;
case
"
q
"
:
date.setMonth(date.getMonth()
+
number
*
3
);
return
date;
case
"
m
"
:
date.setMonth(date.getMonth()
+
number);
return
date;
case
"
w
"
:
date.setDate(date.getDate()
+
number
*
7
);
return
date;
case
"
d
"
:
date.setDate(date.getDate()
+
number);
return
date;
case
"
h
"
:
date.setHours(date.getHours()
+
number);
return
date;
case
"
m
"
:
date.setMinutes(date.getMinutes()
+
number);
return
date;
case
"
s
"
:
date.setSeconds(date.getSeconds()
+
number);
return
date;
default
:
date.setDate(d.getDate()
+
number);
return
date;
}
}
/**/
/*
===========================================
//计算两日期相差的日期年月日等
===========================================
*/
Date.prototype.dateDiff
=
function
(interval,o)
{
//
判断o是否为日期对象
if
(o
&&
o.constructor
==
Date)
{
//
判断是否interval是否是字符串对象
if
(interval
&&
interval.constructor
==
String)
{
var
_start
=
this
.getTime();
var
_end
=
o.getTime();
var
number
=
_end
-
_start;
var
iOut
=
-
1
;
switch
(interval.charAt(
0
))
{
case
'y':
case
'Y':
//
year
iOut
=
o.getFullYear()
-
this
.getFullYear();
break
;
case
'm':
case
'M':
//
month
iOut
=
(o.getFullYear()
-
this
.getFullYear())
*
12
+
(o.getMonth()
-
this
.getMonth());
break
;
case
'q':
case
'Q':
//
quarter
iOut
=
((o.getFullYear()
-
this
.getFullYear())
*
12
+
(o.getMonth()
-
this
.getMonth()))
/
3
;
break
;
case
'd':
case
'D':
//
day
iOut
=
parseInt(number
/
86400000
) ;
break
;
case
'w':
case
'W':
//
week
iOut
=
parseInt(number
/
86400000
/
7
) ;
break
;
case
'h':
case
'H':
//
hour
iOut
=
parseInt(number
/
3600000
) ;
break
;
case
'n':
case
'N':
//
minute
iOut
=
parseInt(number
/
60000
) ;
break
;
case
's':
case
'S':
//
second
iOut
=
parseInt(number
/
1000
) ;
break
;
case
't':
case
'T':
//
microsecond
iOut
=
parseInt(number);
break
;
default
:
iOut
=
-
1
;
}
return
iOut;
}
}
return
-
1
}
/**/
/*
===========================================
//得到日期的组成部分
===========================================
*/
Date.prototype.datePart
=
function
(interval)
{
if
(interval
==
null
)
{
return
-
1
;
}
if
(
/^
(yy
|
yyyy)$
/
.test(interval))
{
return
this
.getFullYear();
}
if
(
/^
(qq
|
q)$
/
.test(interval))
{
return
Math.ceil((
this
.getMonth()
+
1
)
/
4
);
}
if
(
/^
(mm
|
m)$
/
.test(interval))
{
return
this
.getMonth();
}
if
(
/^
(dd
|
d)$
/
.test(interval))
{
return
this
.getDate();
}
if
(
/^
(dw)$
/
.test(interval))
{
return
this
.getDay();
}
if
(
/^
(hh
|
h)$
/
.test(interval))
{
return
this
.getHours();
}
if
(
/^
(mi
|
n)$
/
.test(interval))
{
return
this
.getMinutes();
}
if
(
/^
(ss
|
s)$
/
.test(interval))
{
return
this
.getSeconds();
}
if
(
/^
(ms)$
/
.test(interval))
{
return
this
.getMilliseconds();
}
//
缺少日期的第几周,第几天
return
-
1
;
}
**
*
功能:返回格式化后的日期字符串
*
参数:formatStr为格式字符串,其中表示形式如下列表
*
“ddd”-汉字星期几
*
“yyyy”-四位数年份
*
“MM”-两位数月份
*
“dd”-两位数日期
*
“hh”-两位数小时
*
“mm”-两位数分钟
*
“ss”-两位数秒数
*
“y”-年份
*
“M”-月份
*
“d”-日期
*
“h”-小时
*
“m”-分钟
*
“s”-秒数
*/
Date.prototype.format
=
function
(formatStr)
{
var
WEEK
=
new
Array(
"
星期日
"
,
"
星期一
"
,
"
星期二
"
,
"
星期三
"
,
"
星期四
"
,
"
星期五
"
,
"
星期六
"
);
var
s
=
formatStr;
s
=
s.replace(
/
d
{
3
}
/
g, WEEK[
this
.getDay()]);
s
=
s.replace(
/
y
{
4
}
/
g,
this
.getFullYear());
s
=
s.replace(
/
M
{
2
}
/
g, (
this
.getMonth()
+
1
)
<
10
?
"
0
"
+
(
this
.getMonth()
+
1
) : (
this
.getMonth()
+
1
));
s
=
s.replace(
/
d
{
2
}
/
g,
this
.getDate()
<
10
?
"
0
"
+
this
.getDate() :
this
.getDate());
s
=
s.replace(
/
h
{
2
}
/
g,
this
.getHours()
<
10
?
"
0
"
+
this
.getHours() :
this
.getHours());
s
=
s.replace(
/
m
{
2
}
/
g,
this
.getMinutes()
<
10
?
"
0
"
+
this
.getMinutes() :
this
.getMinutes());
s
=
s.replace(
/
s
{
2
}
/
g,
this
.getSeconds()
<
10
?
"
0
"
+
this
.getSeconds() :
this
.getSeconds());
s
=
s.replace(
/
y
{
1
}
/
g,
this
.getFullYear());
s
=
s.replace(
/
M
{
1
}
/
g,
this
.getMonth()
+
1
);
s
=
s.replace(
/
d
{
1
}
/
g,
this
.getDate());
s
=
s.replace(
/
h
{
1
}
/
g,
this
.getHours());
s
=
s.replace(
/
m
{
1
}
/
g,
this
.getMinutes());
s
=
s.replace(
/
s
{
1
}
/
g,
this
.getSeconds());
return
(s);
}
zhaoxiaoyang(梅雪香@深圳)
整理完毕,发出来大家测测,有意见和建议快提,我好快改
另:计算两个日期的差的功能,我不清楚该如何设计.请大家发表高论
!
<
script language
=
"
JavaScript
"
>
<!--
function
PowerDate(timeString)
{
this
.date
=
null
;
if
(timeString
!=
""
)
this
.date
=
new
Date(timeString);
else
this
.date
=
new
Date();
this
.isFmtZero
=
false
;
this
.weekArr
=
[[
"
星期日
"
,
"
星期一
"
,
"
星期二
"
,
"
星期三
"
,
"
星期四
"
,
"
星期五
"
,
"
星期六
"
],
[
"
SUN
"
,
"
MON
"
,
"
TUR
"
,
"
WED
"
,
"
THU
"
,
"
FRI
"
,
"
SAT
"
]];
this
.monthArr
=
[
"
JAN
"
,
"
FEB
"
,
"
MAR
"
,
"
APR
"
,
"
MAY
"
,
"
JUN
"
,
"
JUL
"
,
"
AUG
"
,
"
SEP
"
,
"
OCT
"
,
"
NOV
"
,
"
DEC
"
];
this
.getFullYear
=
function
()
{
return
this
.date.getFullYear();
}
;
this
.getYear
=
function
()
{
return
this
.date.getYear();
}
;
this
.getMonth
=
function
()
{
var
mm
=
this
.date.getMonth()
+
1
;
if
(
this
.isFmtZero
==
true
&&
mm
<
10
)
return
"
0
"
+
mm;
else
return
mm;
}
;
this
.getDay
=
function
()
{
var
dd
=
this
.date.getDate();
if
(
this
.isFmtZero
==
true
&&
dd
<
10
)
return
"
0
"
+
dd;
else
return
dd;
}
;
this
.getHour
=
function
()
{
var
hh
=
this
.date.getHours();
if
(
this
.isFmtZero
==
true
&&
hh
<
10
)
return
"
0
"
+
hh;
else
return
hh;
}
;
this
.getMinute
=
function
()
{
var
mi
=
this
.date.getMinutes();
if
(
this
.isFmtZero
==
true
&&
mi
<
10
)
return
"
0
"
+
mi;
else
return
mi;
}
;
this
.getSecond
=
function
()
{
var
ss
=
this
.date.getSeconds();
if
(
this
.isFmtZero
==
true
&&
ss
<
10
)
return
"
0
"
+
ss;
else
return
ss;
}
;
this
.getMillisecond
=
function
()
{
var
ss
=
this
.date.getMilliseconds();
if
(
this
.isFmtZero
==
true
&&
ss
<
10
)
return
"
00
"
+
ss;
else
if
(
this
.isFmtZero
==
true
&&
ss
<
100
)
return
"
0
"
+
ss;
else
return
ss;
}
;
this
.getWeek
=
function
()
{
return
this
.date.getDay();
}
;
this
.setIsFmtZero
=
function
(val)
{
this
.isFmtZero
=
val;
}
;
/**/
/*
功能:根据输入表达式返回日期字符串
参数:dateFmt:字符串,由以下结构组成 yy:长写年,YY:短写年mm:数字月,MM:英文月,dd:日,hh:时,mi:分,ss秒,ms:毫秒,we:汉字星期,WE:英文星期.
isFmtZero:布尔值,true:需要用0补位,false:不需要用0补位
*/
this
.getString
=
function
(dateFmt)
{
if
(
typeof
(dateFmt)
!=
"
string
"
)
throw
(
new
Error(
-
1
, 'getString()方法需要字符串类型参数
!
'));
var
str
=
dateFmt;
str
=
str.replace(
/
yy
/
g,
this
.getFullYear());
str
=
str.replace(
/
YY
/
g,
this
.getYear());
str
=
str.replace(
/
mm
/
g,
this
.getMonth());
str
=
str.replace(
/
MM
/
g,
this
.monthArr[
this
.getMonth()
-
1
]);
str
=
str.replace(
/
dd
/
g,
this
.getDay());
str
=
str.replace(
/
hh
/
g,
this
.getHour());
str
=
str.replace(
/
mi
/
g,
this
.getMinute());
str
=
str.replace(
/
ss
/
g,
this
.getSecond());
str
=
str.replace(
/
ms
/
g,
this
.getMillisecond());
str
=
str.replace(
/
we
/
g,
this
.weekArr[
0
][
this
.getWeek()]);
str
=
str.replace(
/
WE
/
g,
this
.weekArr[
1
][
this
.getWeek()]);
return
str;
}
;
/**/
/*
名称 : dateAfterDays
* 功能 : 返回与某日期相距N天(N个24小时)的日期
* 参数 : num number类型 可以为正负整数或者浮点数
* 返回 : 新的日期
* 方法 : powerDate.dateAfterDays(num);
*/
this
.dateAfterDays
=
function
(num)
{
if
(
typeof
(num)
!=
"
number
"
)
throw
new
Error(
-
1
,
"
dateAfterDays(num)参数为数值类型.
"
);
var
dd
=
this
.date.valueOf();
dd
+=
num
*
24
*
3600
*
1000
;
this
.date
=
new
Date(dd);
return
this
;
}
;
/**/
/*
名称 : dateAfterSeconds
* 功能 : 返回与某日期相距N秒的日期
* 参数 : num number类型 可以为正负整数或者浮点数
* 返回 : 新的日期
* 方法 : powerDate.dateAfterDays(num);
*/
this
.dateAfterSeconds
=
function
(num)
{
if
(
typeof
(num)
!=
"
number
"
)
throw
new
Error(
-
1
,
"
dateAfterDays(num)参数为数值类型.
"
);
var
dd
=
this
.date.valueOf();
dd
+=
num
*
1000
;
this
.date
=
new
Date(dd);
return
this
;
}
;
//
判断是否是闰年
this
.isLeapYear
=
function
()
{
var
year
=
this
.getFullYear();
return
(
0
==
year
%
4
&&
((year
%
100
!=
0
)
||
(year
%
400
==
0
)));
}
;
//
返回该月天数
this
.getDaysOfMonth
=
function
()
{
return
(
new
Date(
this
.getFullYear(),
this
.getMonth(),
0
)).getDate();
}
;
//
转换成大写日期(中文)
this
.getChinaDate
=
function
()
{
var
year
=
this
.getFullYear().toString();
var
month
=
this
.getMonth().toString();
var
day
=
this
.getDay().toString();
var
arrNum
=
[
"
零
"
,
"
一
"
,
"
二
"
,
"
三
"
,
"
四
"
,
"
五
"
,
"
六
"
,
"
七
"
,
"
八
"
,
"
九
"
,
"
十
"
,
"
十一
"
,
"
十二
"
];
var
strTmp
=
""
;
for
(
var
i
=
0
,j
=
year.length;i
<
j;i
++
)
{
strTmp
+=
arrNum[year.charAt(i)];
}
strTmp
+=
"
年
"
;
strTmp
+=
arrNum[month]
+
"
月
"
;
if
(day
<
10
)
strTmp
+=
arrNum[day];
else
if
(day
<
20
)
strTmp
+=
"
十
"
+
arrNum[day
-
10
];
else
if
(day
<
30
)
strTmp
+=
"
二十
"
+
arrNum[day
-
20
];
else
strTmp
+=
"
三十
"
+
arrNum[day
-
30
];
strTmp
+=
"
日
"
;
return
strTmp;
}
;
//
日期比较函数,如大于参数:1,相等:0 不等: -1
this
.dateCompare
=
function
(dat)
{
if
(
typeof
(dat)
==
"
string
"
)
{
if
(dat
!=
""
) dat
=
new
Date(timeString);
else
dat
=
new
Date();
}
if
(
typeof
(dat)
!=
"
object
"
||
dat.constructor
!=
Date)
{
throw
new
Error(
-
2
,
"
dateCompare的参数为日期类型或者可直接转化为日期类型的字符串!
"
);
}
var
d
=
this
.date.getTime()
-
dat.getTime();
return
d
>
0
?
1
:(d
==
0
?
0
:
-
1
);
}
}
var
d
=
new
PowerDate(
""
);
d.setIsFmtZero(
true
);
alert(d.getString(
"
yy-mm-dd hh:mi:ss.ms
"
));
//
-->
</
script
>
<
body
>
</
body
>
又改写了一下,可以用所有初始化Date对象的方法来初始化PowerDate对象了,而且可以是更不符合要求的字符串如:
new
PowerDate(
"
2005@#@#8----22
"
);也一样可以成功初始化,只是一定要包含三个数值.
农历的算法太长了,而且在开发中也很少应用,所以暂不加到该类中来.
新代码如下:
<
script language
=
"
JavaScript
"
>
<!--
function
PowerDate()
{
//
日期对象
this
.date
=
null
;
//
格式化时是否加零补位标志
this
.isFmtZero
=
false
;
this
.weekArr
=
[[
"
星期日
"
,
"
星期一
"
,
"
星期二
"
,
"
星期三
"
,
"
星期四
"
,
"
星期五
"
,
"
星期六
"
],
[
"
SUN
"
,
"
MON
"
,
"
TUR
"
,
"
WED
"
,
"
THU
"
,
"
FRI
"
,
"
SAT
"
]];
this
.monthArr
=
[
"
JAN
"
,
"
FEB
"
,
"
MAR
"
,
"
APR
"
,
"
MAY
"
,
"
JUN
"
,
"
JUL
"
,
"
AUG
"
,
"
SEP
"
,
"
OCT
"
,
"
NOV
"
,
"
DEC
"
];
//
初始化日期对象
switch
(arguments.length)
{
case
0
:
this
.date
=
new
Date();
break
;
case
1
:
var
reg
=
/^
(\d
{
2
,
4
}
)\D
+
(\d
{
1
,
2
}
)\D
+
(\d
{
1
,
2
}
)$
/
;
var
str
=
arguments[
0
].replace(
/
\s
/
,
""
);
str
=
str.replace(reg,
"
$1/$2/$3
"
);
this
.date
=
new
Date(str);
break
;
case
3
:
this
.date
=
new
Date(arguments[
0
],arguments[
1
]
-
1
,arguments[
2
]);
break
;
case
6
:
this
.date
=
new
Date(arguments[
0
],arguments[
1
]
-
1
,arguments[
2
],arguments[
3
],arguments[
4
],arguments[
5
]);
break
;
case
7
:
this
.date
=
new
Date(arguments[
0
],arguments[
1
]
-
1
,arguments[
2
],arguments[
3
],arguments[
4
],arguments[
5
],arguments[
6
]);
break
;
default
:
this
.date
=
new
Date(
"
1970/1/1
"
);
break
;
}
//
初始化失败处理
if
(
typeof
(
this
.date)
!=
"
object
"
||
!
(
/
Date
/
.test(
this
.date.constructor)))
throw
(
new
Error(
-
1
, '构造PowerDate方法失败,检查输入参数
!
'));
this
.getDate
=
function
()
{
return
this
.date;
}
this
.getFullYear
=
function
()
{
return
this
.date.getFullYear();
}
;
this
.getYear
=
function
()
{
return
this
.date.getYear();
}
;
this
.getMonth
=
function
()
{
return
this
.frmWithZero(
this
.date.getMonth()
+
1
);
}
;
this
.getDay
=
function
()
{
return
this
.frmWithZero(
this
.date.getDate());
}
;
this
.getHour
=
function
()
{
return
this
.frmWithZero(
this
.date.getHours());
}
;
this
.getMinute
=
function
()
{
return
this
.frmWithZero(
this
.date.getMinutes());
}
;
this
.getSecond
=
function
()
{
return
this
.frmWithZero(
this
.date.getSeconds());
}
;
this
.getMillisecond
=
function
()
{
var
ss
=
this
.date.getMilliseconds();
if
(
this
.isFmtZero
==
true
&&
ss
<
10
)
return
"
00
"
+
ss;
else
if
(
this
.isFmtZero
==
true
&&
ss
<
100
)
return
"
0
"
+
ss;
else
return
ss;
}
;
this
.getWeek
=
function
()
{
return
this
.date.getDay();
}
;
this
.setIsFmtZero
=
function
(val)
{
this
.isFmtZero
=
val;
}
;
this
.frmWithZero
=
function
(num)
{
if
(
this
.isFmtZero
==
true
&&
num
<
10
)
return
"
0
"
+
num;
else
return
num;
}
/**/
/*
功能:根据输入表达式返回日期字符串
参数:dateFmt:字符串,由以下结构组成 yy:长写年,YY:短写年mm:数字月,MM:英文月,dd:日,hh:时,mi:分,ss秒,ms:毫秒,we:汉字星期,WE:英文星期.
isFmtZero:布尔值,true:需要用0补位,false:不需要用0补位
*/
this
.getString
=
function
(dateFmt)
{
if
(
typeof
(dateFmt)
!=
"
string
"
)
throw
(
new
Error(
-
1
, 'getString()方法需要字符串类型参数
!
'));
var
str
=
dateFmt;
str
=
str.replace(
/
yy
/
g,
this
.getFullYear());
str
=
str.replace(
/
YY
/
g,
this
.getYear());
str
=
str.replace(
/
mm
/
g,
this
.getMonth());
str
=
str.replace(
/
MM
/
g,
this
.monthArr[
this
.getMonth()
-
1
]);
str
=
str.replace(
/
dd
/
g,
this
.getDay());
str
=
str.replace(
/
hh
/
g,
this
.getHour());
str
=
str.replace(
/
mi
/
g,
this
.getMinute());
str
=
str.replace(
/
ss
/
g,
this
.getSecond());
str
=
str.replace(
/
ms
/
g,
this
.getMillisecond());
str
=
str.replace(
/
we
/
g,
this
.weekArr[
0
][
this
.getWeek()]);
str
=
str.replace(
/
WE
/
g,
this
.weekArr[
1
][
this
.getWeek()]);
return
str;
}
;
/**/
/*
功能 : 返回与某日期相距N天(N个24小时)的日期
* 参数 : num number类型 可以为正负整数或者浮点数
* 返回 : 新的PowerDate类型
* 方法 : powerDate.dateAfterDays(num);
*/
this
.dateAfterDays
=
function
(num)
{
if
(
typeof
(num)
!=
"
number
"
)
throw
new
Error(
-
1
,
"
dateAfterDays(num)参数为数值类型.
"
);
var
dd
=
this
.date.valueOf();
dd
+=
num
*
24
*
3600
*
1000
;
this
.date
=
new
Date(dd);
return
this
;
}
;
/**/
/*
功能 : 返回与某日期相距N秒的日期
* 参数 : num number类型 可以为正负整数或者浮点数
* 返回 : 新的日期
* 方法 : powerDate.dateAfterDays(num);
*/
this
.dateAfterSeconds
=
function
(num)
{
if
(
typeof
(num)
!=
"
number
"
)
throw
new
Error(
-
1
,
"
dateAfterDays(num)参数为数值类型.
"
);
var
dd
=
this
.date.valueOf();
dd
+=
num
*
1000
;
this
.date
=
new
Date(dd);
return
this
;
}
;
//
判断是否是闰年
this
.isLeapYear
=
function
()
{
var
year
=
this
.getFullYear();
return
(
0
==
year
%
4
&&
((year
%
100
!=
0
)
||
(year
%
400
==
0
)));
}
;
//
返回该月天数
this
.getDaysOfMonth
=
function
()
{
return
(
new
Date(
this
.getFullYear(),
this
.getMonth(),
0
)).getDate();
}
;
//
转换成大写日期(中文)
this
.getChinaDate
=
function
()
{
var
year
=
this
.getFullYear();
var
month
=
this
.getMonth();
var
day
=
this
.getDay();
var
arrNum
=
[
"
零
"
,
"
一
"
,
"
二
"
,
"
三
"
,
"
四
"
,
"
五
"
,
"
六
"
,
"
七
"
,
"
八
"
,
"
九
"
,
"
十
"
,
"
十一
"
,
"
十二
"
];
var
strTmp
=
""
;
for
(
var
i
=
0
,j
=
year.length;i
<
j;i
++
)
{
strTmp
+=
arrNum[year.charAt(i)];
}
strTmp
+=
"
年
"
;
strTmp
+=
arrNum[month]
+
"
月
"
;
if
(day
<
10
)
strTmp
+=
arrNum[day];
else
if
(day
<
20
)
strTmp
+=
"
十
"
+
arrNum[day
-
10
];
else
if
(day
<
30
)
strTmp
+=
"
二十
"
+
arrNum[day
-
20
];
else
strTmp
+=
"
三十
"
+
arrNum[day
-
30
];
strTmp
+=
"
日
"
;
return
strTmp;
}
;
//
日期比较函数,如大于参数:1,相等:0 不等: -1
this
.dateCompare
=
function
(dat)
{
if
(
typeof
(dat)
==
"
string
"
)
{
if
(dat
!=
""
) dat
=
new
Date(timeString);
else
dat
=
new
Date();
}
if
(
typeof
(dat)
!=
"
object
"
||
!
(
/
Date
/
.test(
this
.date.constructor)))
{
throw
new
Error(
-
2
,
"
dateCompare的参数为日期类型或者可直接转化为日期类型的字符串!
"
);
}
var
d
=
this
.date.getTime()
-
dat.getTime();
return
d
>
0
?
1
:(d
==
0
?
0
:
-
1
);
}
}
var
d
=
new
PowerDate(
"
98-5/1
"
);
//
实例化一个PowerDate对象
d.setIsFmtZero(
true
);
//
设置为用0补位输出
alert(d.getString(
"
yy-mm-dd hh:mi:ss.ms
"
));
//
输出日期字符串
//
-->
</
script
>
新加了记算日期的方法,请大家帮测一下
/**/
/*
功能:返回两日期之差
*参数:pd PowerDate对象
* type: 返回类别标识.yy:年,mm:月,dd:日,hh:小时,mi:分,ss:秒,ms:毫秒
* intOrFloat :返回整型还是浮点型值 0:整型,1:浮点型
*/
this
.calDateDistance
=
function
(pd,type,intOrFloat)
{
var
miSecMain
=
this
.date.valueOf();
var
miSecSub
=
pd.getDate().valueOf();
var
num
=
0
;
switch
(type)
{
case
"
yy
"
: num
=
this
.getFullYear()
-
pd.getFullYear();
break
;
case
"
mm
"
: num
=
(
this
.getFullYear()
-
pd.getFullYear())
*
12
+
this
.getMonth()
-
pd.getMonth();
break
;
case
"
dd
"
: num
=
this
.fmtRtnVal((miSecMain
-
miSecSub)
/
86400000
,intOrFloat);
break
;
case
"
hh
"
: num
=
this
.fmtRtnVal((miSecMain
-
miSecSub)
/
3600000
,intOrFloat);
break
;
case
"
mi
"
: num
=
this
.fmtRtnVal((miSecMain
-
miSecSub)
/
60000
,intOrFloat);
break
;
case
"
ss
"
: num
=
this
.fmtRtnVal((miSecMain
-
miSecSub)
/
1000
,intOrFloat);
break
;
case
"
ms
"
: num
=
(miSecMain
-
miSecSub);
break
;
default
:
throw
new
Error(
-
1
,
"
没有您要求返回的类型,请检查输入参数!
"
);
break
;
}
return
num;
}
;
this
.fmtRtnVal
=
function
(val,intOrFloat)
{
//
alert(val);
return
(intOrFloat
==
0
?
Math.floor(val) : parseInt(val
*
100
)
/
100
);
}
;
测试语句:
var
d
=
new
PowerDate(
new
Date());
//
实例化一个PowerDate对象
alert(d.calDateDistance(
new
PowerDate(
"
2005/5/31
"
),
"
hh
"
,
1
));
//
输出日期字符串
查看全文
相关阅读:
mac上虚拟机:VMWare Fusion, VirtualBox, Parallels Desktop, CrossOver, Veertu
linux使用其它用户 su
CentOS7 rc.local开机开法启动
taskkill
Make sure that the controller has a parameterless public constructor.
An Autofac Lifetime Primer
Controlling Scope and Lifetime
Instance scope
Linq的TakeWhile的用法
Git does not apply deleted files when merging an old branch into the master. How can I tell Git to apply deleted files?
原文地址:https://www.cnblogs.com/goody9807/p/283495.html
最新文章
用简单直白的方式讲解A星寻路算法原理
C#实现的三种方式实现模拟键盘按键
http的短连接和长连接
SQL Server此数据库没有有效所有者
佐哈尔
sql多表更新使用别名(小技巧)
Firefox显示 您的链接不安全 的解决办法
Centos如何设置IP地址,LINUX怎么修改IP地址
CentOS下如何从vi编辑器插入模式退出到命令模式
.NET自带IOC容器MEF之初体验(转)
热门文章
增量更新
Linux: su sudo sudoer
新版台式机安装win7操作系统
python 输出所有大小写字母, range()以及列表切片
python 字典dict和列表list的读取速度问题, range合并
Python+C混编
Go语言的9大优势和3大缺点, GO语言最初的定位就是互联网时代的C语言, 我为什么放弃Go语言
linux:使用comm命令比较两个文件:交集、差
Linux查找并删除重复文件的命令行fdupes工具,dupeGuru图形工具
ubuntu登录黑屏“failed to start session”, gdm+kdm+lightdm
Copyright © 2011-2022 走看看