javascript日期时间函数(全)
5 H) _/ d5 a3 X- {3 z, \日期时间脚本库方法列表" C$ t+ j4 }' ]
date.prototype.isleapyear 判断闰年( M! D0 i2 T% n" @: Y9 `8 X0 X
date.prototype.format 日期格式化: l, b% g9 O, {# C' N- A! I
date.prototype.dateadd 日期计算
4 h" \) Q9 z7 B0 ?; b: Jdate.prototype.datediff 比较日期差! m; v- ?. K7 C# K5 E& G# L; R
date.prototype.tostring 日期转字符串
% q/ F( L* V. [; u! hdate.prototype.toarray 日期分割为数组
, s8 G' v/ U0 [2 j$ {date.prototype.datepart 取日期的部分信息
+ B6 |- e( d5 I, a; I, w$ Z8 ~date.prototype.maxdayofdate 取日期所在月的最大天数/ L- q: \# c& N! p
date.prototype.weeknumofyear 判断日期所在年的第几周" T9 \* k$ ~3 {; m2 Y1 Z0 x
stringtodate 字符串转日期型
5 g# L) E } r4 cisvaliddate 验证日期有效性( }. j3 C8 \6 ^/ m
checkdatetime 完整日期时间检查/ q# w8 q% ]! @9 W
daysbetween 日期天数差
1 A+ m* g- |% n& ?% S( ?js 代码9 z& _3 E' u% W4 C0 X+ W3 p) [" h
//--------------------------------------------------- & U6 ~; t: \/ X" X+ b" ?
// 判断闰年 z5 X- r$ S6 t4 b( C/ k( a8 M
//--------------------------------------------------- ! f h9 P% b, V6 F3 E: i2 w
date.prototype.isleapyear = function() 5 Z6 I' W9 q& g# p+ m6 b% p3 M
{
% O* h3 ~% P4 G3 Z4 t( B return (0==this.getyear()%4&&((this.getyear()%100!=0)||(this.getyear()%400==0)));
2 a V. N+ }) @6 E}
, h' F( S" e4 O$ o! `//--------------------------------------------------- ( E X# E8 z( e% b' {! O" F2 T& |5 [
// 日期格式化
- g. F4 z0 I _4 p7 O// 格式 yyyy/yyyy/yy/yy 表示年份
0 W7 T( T6 m% V- ]// mm/m 月份
, r& ?+ j6 B6 M- A' k8 `// w/w 星期 $ ]7 C1 V3 c' c: O7 D* E T
// dd/dd/d/d 日期 . U7 p$ o6 x1 c F
// hh/hh/h/h 时间
9 n; G: |9 N6 o6 L2 ^# V1 Z// mm/m 分钟
2 I: o/ H U: g8 n- |. a- i6 B// ss/ss/s/s 秒
. o$ v9 q1 b8 s. F/ w% t' C//--------------------------------------------------- + P) H ~* k+ ?8 a7 M
date.prototype.format = function(formatstr) 6 c; F9 d- S) R7 [ F& |. G4 K
{
! b0 x) o) H9 ^4 g) c var str = formatstr;
; v& l) `( [- k3 l7 }1 H var week = ['日','一','二','三','四','五','六'];
' C0 ]0 i4 N; w$ Z+ X; P, j str=str.replace(/yyyy|yyyy/,this.getfullyear());
- M, z; f& a: [* f9 G: e str=str.replace(/yy|yy/,(this.getyear() % 100)>9?(this.getyear() % 100).tostring():'0' + (this.getyear() % 100)); ) t0 T8 k( i4 s( G
str=str.replace(/mm/,this.getmonth()>9?this.getmonth().tostring():'0' + this.getmonth());
. E4 `9 i( T, t' I str=str.replace(/m/g,this.getmonth());
! z$ Z! A) A, y5 G* @" n' i str=str.replace(/w|w/g,week[this.getday()]); 4 }; z' h7 D' T3 ?
str=str.replace(/dd|dd/,this.getdate()>9?this.getdate().tostring():'0' + this.getdate());
/ ~. g) Y( D0 f( D str=str.replace(/d|d/g,this.getdate()); ; T' M& [# [1 C' y
str=str.replace(/hh|hh/,this.gethours()>9?this.gethours().tostring():'0' + this.gethours());
; y3 C% @ C7 C) h* p0 m+ l4 e str=str.replace(/h|h/g,this.gethours()); . Z. v) }5 \2 z8 I) d
str=str.replace(/mm/,this.getminutes()>9?this.getminutes().tostring():'0' + this.getminutes());
9 ^$ H8 l* D; u5 m4 @ str=str.replace(/m/g,this.getminutes());
+ V0 @! s+ h5 z6 ~" [ str=str.replace(/ss|ss/,this.getseconds()>9?this.getseconds().tostring():'0' + this.getseconds());
+ I- _5 A3 J/ ~3 a4 @" w% ~& v( J str=str.replace(/s|s/g,this.getseconds()); : o3 t, g1 B% p- x# s
return str;
; U, O9 |- b2 M} * y/ j' O& m5 p% C
//+---------------------------------------------------
: k/ K4 A$ D/ i B, H2 ~/ `' a7 m//| 求两个时间的天数差 日期格式为 yyyy-mm-dd
. L* z, q/ P K* C- [4 X u//+---------------------------------------------------
- E* Y( ~* ]$ C- Jfunction daysbetween(dateone,datetwo)
: e5 j4 ?3 W3 t& p$ s4 I- [) U+ i{ / l: ?8 x1 L/ u$ n& Z2 G3 B) Y- Z9 a
var onemonth = dateone.substring(5,dateone.lastindexof ('-')); : ^/ |0 ]) l n
var oneday = dateone.substring(dateone.length,dateone.lastindexof ('-')+1); $ ~# @9 q. K0 Y6 A& z
var oneyear = dateone.substring(0,dateone.indexof ('-')); ; e9 }3 t, ~7 Q
var twomonth = datetwo.substring(5,datetwo.lastindexof ('-'));
, m' N! \& B( ~' R q# Q) V var twoday = datetwo.substring(datetwo.length,datetwo.lastindexof ('-')+1);
. g: m1 |. ]- a( N" X var twoyear = datetwo.substring(0,datetwo.indexof ('-'));
. |: g/ ]9 D8 a5 C var cha=((date.parse(onemonth+'/'+oneday+'/'+oneyear)- date.parse(twomonth+'/'+twoday+'/'+twoyear))/86400000); , v2 B( D6 R' K {( M, J/ _6 ?" G# ~
return math.abs(cha); 2 q% s' ^8 D! Q# \0 N/ ~7 j
}
; W& |, j0 r3 i& J1 Z4 u//+--------------------------------------------------- $ E7 n; Y" T! A! `. V/ Y
//| 日期计算 3 @8 W! B9 Z/ P5 ^; J
//+---------------------------------------------------
0 [* C& @3 f9 v; Z: _date.prototype.dateadd = function(strinterval, number) {
# _( n1 p' l3 l0 y" x }: d# \9 a var dttmp = this;
4 Z4 g- `) Z( c- H0 T0 Z4 c) l switch (strinterval) { , |$ w+ S+ V% L/ N5 Y; O* v
case 's' :return new date(date.parse(dttmp) + (1000 * number));
) s+ b5 \$ k4 x/ t4 _1 n, x8 Q case 'n' :return new date(date.parse(dttmp) + (60000 * number));
$ s( X' b- y$ [' G7 x& c# } case 'h' :return new date(date.parse(dttmp) + (3600000 * number));
5 e7 w/ Z& }; [- ^' i$ R case 'd' :return new date(date.parse(dttmp) + (86400000 * number)); V# w' _1 l3 U! f
case 'w' :return new date(date.parse(dttmp) + ((86400000 * 7) * number));
$ Z# T/ T, c1 Z$ n7 a case 'q' :return new date(dttmp.getfullyear(), (dttmp.getmonth()) + number*3, dttmp.getdate(), dttmp.gethours(), dttmp.getminutes(), dttmp.getseconds());
0 t0 }; z+ X7 r$ G/ L: u/ a4 E case 'm' :return new date(dttmp.getfullyear(), (dttmp.getmonth()) + number, dttmp.getdate(), dttmp.gethours(), dttmp.getminutes(), dttmp.getseconds()); 2 L9 W$ b; c) @: ?
case 'y' :return new date((dttmp.getfullyear() + number), dttmp.getmonth(), dttmp.getdate(), dttmp.gethours(), dttmp.getminutes(), dttmp.getseconds()); 9 } }% r, p( T8 D( [( R
}
. d& M8 k8 i! a2 z" {} - V# A5 P; w5 B. Z7 [3 R0 q+ H
//+--------------------------------------------------- ! E( K8 @2 D- z6 H; Q0 o9 F
//| 比较日期差 dtend 格式为日期型或者 有效日期格式字符串
% q) D( P5 g( Y6 R. o+ ?//+---------------------------------------------------
: I# c, @# R8 i6 C, Qdate.prototype.datediff = function(strinterval, dtend) {
4 q6 _3 {, c8 I1 p5 @ var dtstart = this;
3 E; T; u7 l( Y$ c% L if (typeof dtend == 'string' )//如果是字符串转换为日期型 ' y, a6 Y" ^$ J. w: `! Y' S
{ " a4 X( Q& e7 h1 _
dtend = stringtodate(dtend);
% s* W( m) {2 R1 [7 Y/ p } 7 n; K9 _6 U' @! h5 Z/ }" e$ ?
switch (strinterval) {
* V/ }0 c7 u1 i case 's' :return parseint((dtend - dtstart) / 1000); 7 w; i2 B: X5 c& w
case 'n' :return parseint((dtend - dtstart) / 60000);
; ~( H- S/ j+ R+ z$ A9 Q i( M0 ^ case 'h' :return parseint((dtend - dtstart) / 3600000);
% T% _0 t" E2 I! N& Z6 T4 P. ] case 'd' :return parseint((dtend - dtstart) / 86400000);
; ~8 t8 L1 z2 Z# u' G/ U case 'w' :return parseint((dtend - dtstart) / (86400000 * 7));
, s9 x4 A; @& T1 h case 'm' :return (dtend.getmonth()+1)+((dtend.getfullyear()-dtstart.getfullyear())*12) - (dtstart.getmonth()+1); ( }$ i) ~/ j, y) Z9 k
case 'y' :return dtend.getfullyear() - dtstart.getfullyear(); , P# j0 V, W; [8 T& M& N% O
}
u. z' @1 X- a% s1 U' I} , B% I" @( M) L" F
//+---------------------------------------------------
- Y2 A' R% J- ?+ a/ B: I: g//| 日期输出字符串,重载了系统的tostring方法 " a8 m7 R7 x/ R; P0 \
//+--------------------------------------------------- 6 ?3 v) r( p8 H+ k: ^9 x$ ~
date.prototype.tostring = function(showweek)
! D8 H2 F2 g C. F8 G3 g/ f. c{
; }' A# c' @) n: Q: w, f var mydate= this;
% T$ E N& ~; [, l7 O6 c var str = mydate.tolocaledatestring(); 0 M4 m. I( V) U; X
if (showweek)
' m3 ]1 L3 f# S1 [3 u: @5 M {
5 w I( s" `4 W V/ \; R. r var week = ['日','一','二','三','四','五','六'];
* q. M: r4 U' ` L% l$ y str += ' 星期' + week[mydate.getday()]; , K$ |9 \& ?. ^4 @+ s+ ]. {
}
; ]$ G' k% H8 B2 L. ? return str;
/ L- G+ t! A# b4 W& }0 L}
2 x. h2 b- s; c: @- P//+--------------------------------------------------- $ D% W* O! s- |3 ]5 `
//| 日期合法性验证
- e) `) {3 A i! @( J//| 格式为:yyyy-mm-dd或yyyy/mm/dd 6 F, y6 y# a2 W/ X9 N( a D
//+--------------------------------------------------- ( l+ [0 b+ X8 {. w6 U
function isvaliddate(datestr)
- n! v) h, @/ B% Y{ * n/ D+ a- L7 S, I% A8 ]
var sdate=datestr.replace(/(^\s+|\s+$)/g,''); //去两边空格; ) ]$ {& l3 Z( s! B# i
if(sdate=='') return true; 5 o, K* u! T9 u! u
//如果格式满足yyyy-(/)mm-(/)dd或yyyy-(/)m-(/)dd或yyyy-(/)m-(/)d或yyyy-(/)mm-(/)d就替换为''
9 M- M* G0 I/ m/ C //数据库中,合法日期可以是:yyyy-mm/dd(2003-3/21),数据库会自动转换为yyyy-mm-dd格式
5 o2 ]7 `" E' j# w3 J var s = sdate.replace(/[\d]{ 4,4 }[\-/]{ 1 }[\d]{ 1,2 }[\-/]{ 1 }[\d]{ 1,2 }/g,''); . `8 ?3 u" a0 u% n; \0 d
if (s=='') //说明格式满足yyyy-mm-dd或yyyy-m-dd或yyyy-m-d或yyyy-mm-d
& s5 {! ^( F& O { 6 T @: x' Y3 @. x
var t=new date(sdate.replace(/\-/g,'/'));
7 m& U- ?' _( v5 d3 i var ar = sdate.split(/[-/:]/); 5 r% L3 _3 O4 O
if(ar[0] != t.getyear() || ar[1] != t.getmonth()+1 || ar[2] != t.getdate())
& `4 C8 u5 l' W9 x* w { 2 q- H! J5 j2 {2 s: Q/ @
//alert('错误的日期格式!格式为:yyyy-mm-dd或yyyy/mm/dd。注意闰年。'); ' p" I! P8 }' W2 r
return false;
8 t4 ]* q# \7 O) T, L8 ] }
, ]* f6 T- h, P3 q \ }
3 @2 J) B. J/ k else 8 r3 e& y+ S. G: @# [
{ 1 [% }5 K2 K& O1 M! k
//alert('错误的日期格式!格式为:yyyy-mm-dd或yyyy/mm/dd。注意闰年。');
% J+ z: ?' v* ?9 k! k! t return false;
j" X. X) c& `$ o; [' t* W } x6 P/ {' o- _0 @
return true; & H+ H; T) |& q% d) j5 B1 v' N
}
0 p# j. T, ? n- a4 U//+---------------------------------------------------
9 `+ B( l% t8 x; R//| 日期时间检查 6 E) j3 N% R4 \# [& Z' J
//| 格式为:yyyy-mm-dd hh:mm:ss
* x0 G$ O" W; S! G8 t//+---------------------------------------------------
: G: L0 Y( K3 O Q, S3 {function checkdatetime(str) / `1 |# Z7 Q7 C) E
{ 1 ?. J1 m. C% D+ W n
var reg = /^(\d+)-(\d{ 1,2 })-(\d{ 1,2 }) (\d{ 1,2 }):(\d{ 1,2 }):(\d{ 1,2 })$/; & m5 _9 Z* N1 h' f6 j& b
var r = str.match(reg); ( }. F1 Z# r$ I4 w
if(r==null)return false; " o/ Y( K$ U& I) @; v/ n
r[2]=r[2]-1;
* q+ S3 v4 O/ `) o: U; w! S var d= new date(r[1],r[2],r[3],r[4],r[5],r[6]); 6 j& e2 p: [! U( \9 n% ~
if(d.getfullyear()!=r[1])return false;
6 s5 q+ u; ^9 J* x. n2 V if(d.getmonth()!=r[2])return false; ) W/ k& Y1 C& [
if(d.getdate()!=r[3])return false; 7 A2 h+ c: K" _% n# B7 P* N
if(d.gethours()!=r[4])return false; 0 e) M7 s4 Z/ ~; D- V
if(d.getminutes()!=r[5])return false;
5 U9 c$ T( N, [, t+ {6 P2 i if(d.getseconds()!=r[6])return false; , J1 y4 Q7 I: q4 u/ L6 R3 u
return true; P+ U6 H& Z% ~9 I7 K& V
} 7 ?. U; c6 q6 m Z% _$ M
//+---------------------------------------------------
/ b5 x3 E( j, j" }- O2 q* z1 n//| 把日期分割成数组 . h1 g6 l* a) m1 f! f
//+---------------------------------------------------
/ X4 c; F6 g- X3 M0 f+ c% m6 J- Ydate.prototype.toarray = function() 8 i8 y# p1 v. {7 J9 C
{
: F9 N, t/ R/ w/ t var mydate = this;
# g. b& x3 W6 e var myarray = array(); & c' O) c! h, N" ]
myarray[0] = mydate.getfullyear();
! P* J( u/ h# M4 ?( z" P a myarray[1] = mydate.getmonth(); & X4 G; ?" }1 j5 V
myarray[2] = mydate.getdate();
4 M) ^% I8 d( u% h7 `3 X( _1 z( @6 l myarray[3] = mydate.gethours(); % a- R4 f2 C/ v M- O* G" R
myarray[4] = mydate.getminutes(); 8 Y4 |. I. h) j! T
myarray[5] = mydate.getseconds(); - s0 q! j* @, f# ~+ r; C- K
return myarray;
$ O( e& v5 \ Q$ L0 u}
1 J0 B: D# I0 Y' ]/ g6 @//+---------------------------------------------------
7 R# ~$ L3 o7 X2 e# s//| 取得日期数据信息
2 T, P4 [% W- ^) l% M' g" H//| 参数 interval 表示数据类型
/ C% T. q/ k7 ~; X9 N C+ N! ` p//| y 年 m月 d日 w星期 ww周 h时 n分 s秒
6 V, X8 L. _9 t# h3 X1 ?//+---------------------------------------------------
0 U4 N2 @9 t% @8 N& _date.prototype.datepart = function(interval)
3 ], a: N2 Q8 H0 s6 e/ H9 \6 d/ `{ / ?# E$ @: T: Q) c# h% P& q
var mydate = this; / s; T4 x+ P1 o8 O' f5 `
var partstr=''; 9 E5 @3 N% v7 H
var week = ['日','一','二','三','四','五','六'];
. Y1 ]! S" ]! G& D. B) y/ A; G switch (interval)
5 j) ~% t- P3 J {
7 J& P9 ?) f$ F- J0 J& {& D0 E case 'y' :partstr = mydate.getfullyear();break;
! S; W- K w j$ ^% ], j. { case 'm' :partstr = mydate.getmonth()+1;break;
( n7 ^7 [1 X: m+ h7 N0 M8 W5 Z case 'd' :partstr = mydate.getdate();break;
( A- X0 `' j' b case 'w' :partstr = week[mydate.getday()];break;
; W1 O. k G: u. P case 'ww' :partstr = mydate.weeknumofyear();break; ' \/ w" x3 b8 k& R5 [$ X) X, O3 N
case 'h' :partstr = mydate.gethours();break; : t7 s0 Y P7 Z: R0 }
case 'n' :partstr = mydate.getminutes();break; 4 r7 ?8 Q- @: Q/ x4 ]
case 's' :partstr = mydate.getseconds();break;
6 G: }! _# ]7 ?! o+ }# Y } 8 {, i/ m9 j) w6 M
return partstr; : e+ J' n( ~" r, P0 }0 M2 V
}
$ F, r$ P$ D' T S ?, N//+---------------------------------------------------
$ l, C4 g) ~ m//| 取得当前日期所在月的最大天数 ) C: u4 d$ u0 L& x. [+ z4 n
//+--------------------------------------------------- 9 H4 A/ @2 _* K
date.prototype.maxdayofdate = function() / |' u. g2 s; Z, D
{
0 H0 s9 W9 p2 |- ~ var mydate = this;
4 G6 T# b8 Y. d- l var ary = mydate.toarray();
) g5 ^5 ?1 m( r4 m4 B1 n4 l5 B var date1 = (new date(ary[0],ary[1]+1,1)); , U+ R& W, S. ^5 s
var date2 = date1.dateadd(1,'m',1); # P3 p! J3 ^ }
var result = datediff(date1.format('yyyy-mm-dd'),date2.format('yyyy-mm-dd'));
8 K: t# S; w) G& H/ X& g+ ~ return result;
. {7 u1 Z; Y; w, j} 2 C# N: r. p- T X
//+--------------------------------------------------- ) @# ?4 @- B% }; R3 P0 E
//| 取得当前日期所在周是一年中的第几周 . a* _3 ^8 {+ i4 z3 n) O
//+---------------------------------------------------
% ~, {- B j$ Hdate.prototype.weeknumofyear = function() ; A) F$ O. V# |( Z4 p
{ 7 p2 y5 V6 C; Y( t- x) f' }& q
var mydate = this;
. y C- b# S: H v8 C1 f var ary = mydate.toarray();
3 b/ j( t- x' ]; ~4 P! v5 ~9 y var year = ary[0]; & H4 J1 ]4 X. X
var month = ary[1]+1;
1 P$ R( T0 T3 K5 p) n4 b var day = ary[2]; ) Z, S5 T( e7 t0 {2 V6 P
document.write('< script language=vbscript\> \n'); $ y8 P) q: F5 }( S9 e
document.write('mydate = datevalue(''+month+'-'+day+'-'+year+'') \n');
5 n4 @/ D! H) p% G) y5 L% Z6 ?1 V document.write('result = datepart('ww', mydate) \n');
# d$ ^ ^& r! I" t1 F document.write(' \n');
( n( ?5 n4 k$ x6 n2 K0 U) G% Z return result; ( j# T# X7 K- g/ [6 U0 X
}
9 W7 Z: {4 Y7 ^( a//+--------------------------------------------------- ; s! |4 p$ P R0 k+ X
//| 字符串转成日期类型 0 _# j$ {$ R8 x7 `
//| 格式 mm/dd/yyyy mm-dd-yyyy yyyy/mm/dd yyyy-mm-dd
; y2 b. d, o6 h; L2 g//+--------------------------------------------------- ( s: q( q& m7 b' E' ~
function stringtodate(datestr) 4 A- N! _1 ?; ]; ?
{ " `8 s! S* t) D5 g5 c8 v, ^, ~
var converted = date.parse(datestr); * R; ~' W6 }0 `' \
var mydate = new date(converted); ( j: b6 t; X b5 \+ Z
if (isnan(mydate)) 1 m% M4 D! h: E- d+ w2 D9 S
{ 7 o! j7 l$ s* t& Z7 `. l" @
//var delimcahar = datestr.indexof('/')!=-1?'/':'-'; ; _" q2 q, N5 |( k
var arys= datestr.split('-'); % | C4 T, ?5 ?, j! u
mydate = new date(arys[0],--arys[1],arys[2]); 5 S0 h9 b" A% z
} }6 }& u( i5 e
return mydate; . }! d. p @# u$ x: j8 n
}
; S& x [, K8 ^6 k/ t: o4 x% x G/ f% J" @
更多网页制作信息请查看: 网页制作 |
|