javascript日期时间函数(全)
7 B6 i8 K% W- _日期时间脚本库方法列表* h+ e. L$ W# [7 A3 w
date.prototype.isleapyear 判断闰年
* t: F0 C2 v9 Q) i6 u8 \date.prototype.format 日期格式化
1 Z! V& X% U1 ~5 B9 m* F0 Cdate.prototype.dateadd 日期计算
0 a/ a0 D9 x* O/ G, xdate.prototype.datediff 比较日期差8 }- u, W" L, z. ~
date.prototype.tostring 日期转字符串! S1 a- x1 B" M# S) ~
date.prototype.toarray 日期分割为数组- F1 ?& {6 ]7 v& r
date.prototype.datepart 取日期的部分信息% K2 v5 j# n# ~# E' y* e' x
date.prototype.maxdayofdate 取日期所在月的最大天数
- f% a8 T1 K/ F) b1 D7 i3 ]date.prototype.weeknumofyear 判断日期所在年的第几周2 W1 r$ w5 s+ p
stringtodate 字符串转日期型; Q9 f7 i; i% o6 S* U$ a7 m; V
isvaliddate 验证日期有效性
) f9 X/ K0 q7 x! d- T* ^) Wcheckdatetime 完整日期时间检查 G0 u, [: u O9 s! K7 }# l B
daysbetween 日期天数差
. f0 V9 Q m3 wjs 代码
: S) l+ l! d+ `; l2 |//--------------------------------------------------- ) K3 S7 k1 y: {2 F
// 判断闰年
+ U' ~+ q7 Y5 D//---------------------------------------------------
4 N4 e9 Z. ]; Q, Y I2 Y" n Bdate.prototype.isleapyear = function() ( l3 U& z) ^* I+ E) W/ F7 ^
{ % U* }* M: D; |! d
return (0==this.getyear()%4&&((this.getyear()%100!=0)||(this.getyear()%400==0))); 2 Y4 v, T2 J& @
}
% c V! H. s8 `4 D+ Y4 y2 v8 t- p8 a//--------------------------------------------------- $ V6 [8 [. p% l
// 日期格式化 % n+ o. |: b/ ^, v
// 格式 yyyy/yyyy/yy/yy 表示年份 1 g- r& k7 u4 B! @0 E
// mm/m 月份
! F# v4 K9 j; U* s5 K' m// w/w 星期 " {3 d( t% p. ]: ^& F
// dd/dd/d/d 日期 4 j: J5 r5 Q0 c1 q: A9 @9 _
// hh/hh/h/h 时间
+ h! `8 t+ C3 m/ T2 ~# y9 }// mm/m 分钟 - g4 D1 R( g/ |8 R: \
// ss/ss/s/s 秒
3 K: ]0 _+ ?4 s* @& S//---------------------------------------------------
^2 t& s( k8 h Gdate.prototype.format = function(formatstr) 0 w, e9 |# i; Q) ~; Z3 U
{
& b i2 o7 g% j/ ^6 J3 n var str = formatstr;
7 e) k* J. K( V var week = ['日','一','二','三','四','五','六'];
- ]8 _" n6 n5 T! }8 f* n( n8 R0 j# I str=str.replace(/yyyy|yyyy/,this.getfullyear()); % r3 }* p. P- m- Q/ Z
str=str.replace(/yy|yy/,(this.getyear() % 100)>9?(this.getyear() % 100).tostring():'0' + (this.getyear() % 100));
2 j- B2 ]" A+ J4 n- c3 F4 |4 g str=str.replace(/mm/,this.getmonth()>9?this.getmonth().tostring():'0' + this.getmonth());
- |5 T6 y( F( {7 v: j! Q0 X str=str.replace(/m/g,this.getmonth()); 7 N! `5 w6 V9 F4 ~: W h
str=str.replace(/w|w/g,week[this.getday()]); " ] ?6 |" ^% B8 L) l' [
str=str.replace(/dd|dd/,this.getdate()>9?this.getdate().tostring():'0' + this.getdate());
; U3 A& p3 V$ d" Z! r str=str.replace(/d|d/g,this.getdate());
7 @; S5 p" X; d str=str.replace(/hh|hh/,this.gethours()>9?this.gethours().tostring():'0' + this.gethours());
( ^/ m1 |$ ?( L# ?; P str=str.replace(/h|h/g,this.gethours()); ! ]6 E& K; Z8 E3 I
str=str.replace(/mm/,this.getminutes()>9?this.getminutes().tostring():'0' + this.getminutes());
+ R* w" ?' }. p( O+ S4 q str=str.replace(/m/g,this.getminutes()); ( |* x" I* I3 R# F
str=str.replace(/ss|ss/,this.getseconds()>9?this.getseconds().tostring():'0' + this.getseconds());
9 \/ _7 h4 V' H( _+ W1 p: O5 t str=str.replace(/s|s/g,this.getseconds());
3 v5 c9 B: U1 y4 ^' m' a return str;
: d6 s. p( ]% b9 J, k: j/ h} {! S, t( u: z! q
//+---------------------------------------------------
, b3 R' g6 j, Z, \4 a& e# W) r//| 求两个时间的天数差 日期格式为 yyyy-mm-dd
5 w" Z& P( W" s0 m//+--------------------------------------------------- + B- N. @5 s! I# d2 `/ S7 t
function daysbetween(dateone,datetwo) 2 ~; u3 |7 f! w1 Y o. O
{
& c' h0 d4 `( @4 Q e0 O- ^ var onemonth = dateone.substring(5,dateone.lastindexof ('-')); , y' {7 N) R- U& p
var oneday = dateone.substring(dateone.length,dateone.lastindexof ('-')+1);
/ q' l5 u3 j2 I) L; b var oneyear = dateone.substring(0,dateone.indexof ('-')); # S }: c' P! ?# q5 T
var twomonth = datetwo.substring(5,datetwo.lastindexof ('-'));
! N/ e9 v" B2 Z& s% _ var twoday = datetwo.substring(datetwo.length,datetwo.lastindexof ('-')+1); ; e" [& u+ X% N% X8 ~
var twoyear = datetwo.substring(0,datetwo.indexof ('-')); + f& e! _1 _! p) h( |4 H
var cha=((date.parse(onemonth+'/'+oneday+'/'+oneyear)- date.parse(twomonth+'/'+twoday+'/'+twoyear))/86400000);
% X/ O( a6 Q0 K3 T4 F/ o5 ?% z return math.abs(cha); 6 C9 \7 g: _" H. F# X" _% p: D
}
! o1 u9 r& a1 V# V//+---------------------------------------------------
/ o$ A' _( a* S//| 日期计算 7 g! n- P* ^$ S2 j8 K5 g
//+--------------------------------------------------- . u" f9 {. n; @0 ]4 l& N! k5 O4 M
date.prototype.dateadd = function(strinterval, number) { $ W# t; Y" K. W+ N# X* I1 K
var dttmp = this; 7 [) h) B# T) r
switch (strinterval) { ! G9 I) D3 `9 B) M
case 's' :return new date(date.parse(dttmp) + (1000 * number)); * T) m2 m2 ^% L7 n
case 'n' :return new date(date.parse(dttmp) + (60000 * number)); ! H( n- H9 m! _$ `
case 'h' :return new date(date.parse(dttmp) + (3600000 * number));
$ u9 _* E+ I, P% } case 'd' :return new date(date.parse(dttmp) + (86400000 * number)); P: ~1 U9 K: T0 R, L
case 'w' :return new date(date.parse(dttmp) + ((86400000 * 7) * number));
: h/ G6 e# q: {; X' e& \ f, R5 I case 'q' :return new date(dttmp.getfullyear(), (dttmp.getmonth()) + number*3, dttmp.getdate(), dttmp.gethours(), dttmp.getminutes(), dttmp.getseconds());
( }8 j( K5 s A6 w case 'm' :return new date(dttmp.getfullyear(), (dttmp.getmonth()) + number, dttmp.getdate(), dttmp.gethours(), dttmp.getminutes(), dttmp.getseconds()); 4 ?3 e2 w% n [/ D7 P' h
case 'y' :return new date((dttmp.getfullyear() + number), dttmp.getmonth(), dttmp.getdate(), dttmp.gethours(), dttmp.getminutes(), dttmp.getseconds()); $ L7 y, U) N2 e% x
}
1 g% e: n: @0 m j& ]} , _' p+ d/ s2 H1 M$ P
//+---------------------------------------------------
% k% G9 }" P9 X7 `8 C//| 比较日期差 dtend 格式为日期型或者 有效日期格式字符串
% h; N& D- X6 {' P//+---------------------------------------------------
2 G% @- P+ \ A4 X% W, F0 l: ydate.prototype.datediff = function(strinterval, dtend) { 8 ?" b9 E/ x: v4 Q0 V5 m5 [
var dtstart = this;
4 r5 L/ c( M# J* F5 f. E' J: }( S( d if (typeof dtend == 'string' )//如果是字符串转换为日期型 / k, H5 J7 ?8 a! P* b0 m. q$ _
{
. r8 E5 N! R- W3 U dtend = stringtodate(dtend); : V9 h; h, I+ T8 K6 p' b. W# `
}
) y, b# D9 I5 q& \, K9 l switch (strinterval) { * K& s9 C, H- B% _9 ^
case 's' :return parseint((dtend - dtstart) / 1000); 8 {# u0 q1 `0 ^' o, R
case 'n' :return parseint((dtend - dtstart) / 60000);
. F" u, C- C/ [/ O/ e2 r# f case 'h' :return parseint((dtend - dtstart) / 3600000);
! {1 Q* v* h% Y6 W/ f( z8 m: t case 'd' :return parseint((dtend - dtstart) / 86400000);
5 }8 V! X" n. E case 'w' :return parseint((dtend - dtstart) / (86400000 * 7)); 4 {4 F5 u. A9 M: G' V3 e
case 'm' :return (dtend.getmonth()+1)+((dtend.getfullyear()-dtstart.getfullyear())*12) - (dtstart.getmonth()+1);
" E' s, u# g2 l9 C' ? Z$ j7 } case 'y' :return dtend.getfullyear() - dtstart.getfullyear(); 2 `+ \! ?' Y0 Q0 G8 g* f
} " e: [6 t1 m6 I* r
} ! v6 d0 ?2 u2 {6 y7 d( v- g
//+--------------------------------------------------- 1 t' B; K! S3 [) w$ I" `2 ]# ^# a* g
//| 日期输出字符串,重载了系统的tostring方法
2 y* T1 F0 R$ N, l% p2 j! ^% X" u, \//+---------------------------------------------------
9 D. z) ^# X: x% W- ydate.prototype.tostring = function(showweek) 7 h7 h% ?( ]5 M5 I: m
{
* i* F) z. q+ B& ]& a var mydate= this; ! N% U1 Z0 N/ S# l
var str = mydate.tolocaledatestring(); * M! N e( W2 [) n" q
if (showweek) 3 [$ E4 @3 Z& p3 v
{
1 J1 W. Q% w: v, `, f var week = ['日','一','二','三','四','五','六']; 7 `+ e" m) k; y" F/ L; g
str += ' 星期' + week[mydate.getday()];
" q6 h# D: o( k/ K } ; l5 x$ `- ]& _: _
return str;
4 s( _" `+ S0 b: q# {} ' a2 d( Y) ]( j! k: r ?8 U& s. h
//+--------------------------------------------------- 3 H7 g3 b( u" L$ q
//| 日期合法性验证
. c4 K) m% J1 s f6 P p. K q6 e//| 格式为:yyyy-mm-dd或yyyy/mm/dd
) r; n! ?! \; r3 M//+---------------------------------------------------
, A3 Y4 J0 G ]- Rfunction isvaliddate(datestr)
, |3 o- B% W1 G1 e{ 1 R0 g8 ~ ?+ `! w" O0 S1 P- b! S
var sdate=datestr.replace(/(^\s+|\s+$)/g,''); //去两边空格;
* \; }) c3 ]! [7 P if(sdate=='') return true; 4 W9 e0 K+ A; P# b0 W% z1 b
//如果格式满足yyyy-(/)mm-(/)dd或yyyy-(/)m-(/)dd或yyyy-(/)m-(/)d或yyyy-(/)mm-(/)d就替换为''
/ h) w1 L1 m% U, @ f //数据库中,合法日期可以是:yyyy-mm/dd(2003-3/21),数据库会自动转换为yyyy-mm-dd格式 ' \8 V/ N5 ~2 \
var s = sdate.replace(/[\d]{ 4,4 }[\-/]{ 1 }[\d]{ 1,2 }[\-/]{ 1 }[\d]{ 1,2 }/g,''); ( I) f- J, y7 q, J4 ^1 J# H! d
if (s=='') //说明格式满足yyyy-mm-dd或yyyy-m-dd或yyyy-m-d或yyyy-mm-d ! p+ c* l# B! |0 V2 L/ i
{ , {9 e- w8 F& ~
var t=new date(sdate.replace(/\-/g,'/'));
( J1 L+ ^0 b4 X var ar = sdate.split(/[-/:]/);
1 E8 t: E( U8 G- O2 u W3 g n if(ar[0] != t.getyear() || ar[1] != t.getmonth()+1 || ar[2] != t.getdate()) - C4 A9 F& M, y% O
{
, V7 a& w# y2 I, d' J //alert('错误的日期格式!格式为:yyyy-mm-dd或yyyy/mm/dd。注意闰年。');
4 _1 c" D! g% U% o0 c+ p; w2 h& H return false;
; q0 `) X0 k# B/ [- z }
% G+ f7 r# V3 p, d) A' U- e }
- F% h0 R- h3 A! s2 O. p8 [ else
8 C# d; A$ S7 \; o- W+ _6 h! |% r {
% u- e$ ]/ @& j //alert('错误的日期格式!格式为:yyyy-mm-dd或yyyy/mm/dd。注意闰年。');
( a! b2 f0 [: W1 g return false; ' a0 o& }3 r( K5 a
}
) C* m3 H9 v0 g, d+ m return true;
1 g- I9 `3 ^0 p2 `5 A R0 q: E} , g$ w& A9 p8 h; @. _# c
//+--------------------------------------------------- 7 v3 g4 ?7 z' ]1 Z1 K* u
//| 日期时间检查 , s |% O+ e+ u4 a" J7 F9 H2 W
//| 格式为:yyyy-mm-dd hh:mm:ss 9 s# X+ N& T. m" [' F
//+---------------------------------------------------
! f$ v# b) u$ R: L9 i/ Vfunction checkdatetime(str)
, j1 ], r5 A/ I# K: U9 r5 X{
/ [% R8 R0 o6 f' J" w2 f; F6 z" c var reg = /^(\d+)-(\d{ 1,2 })-(\d{ 1,2 }) (\d{ 1,2 }):(\d{ 1,2 }):(\d{ 1,2 })$/;
9 I9 H8 j+ _# x var r = str.match(reg);
* c: V* V: g2 v& k6 A: z b' H if(r==null)return false; 2 }# v6 @( W J- l# A) t2 g; B
r[2]=r[2]-1;
0 A# A& b8 u8 v var d= new date(r[1],r[2],r[3],r[4],r[5],r[6]); & L$ P9 C2 c( @* V- n/ @
if(d.getfullyear()!=r[1])return false; 3 y! h2 u( g% [1 j8 n1 F
if(d.getmonth()!=r[2])return false; 0 ~ {8 X3 N; P4 q2 f: R& [
if(d.getdate()!=r[3])return false; 9 g# S4 \' ^9 M. p: i7 r' j
if(d.gethours()!=r[4])return false; + l/ [" B4 [. z: _# H3 g) }+ b" _ F
if(d.getminutes()!=r[5])return false;
) m: h( O) h6 f! c0 m if(d.getseconds()!=r[6])return false;
7 w$ x/ t4 ?: N, p# c return true; $ V5 ~* e2 P9 J5 i
} & ^0 x+ v& l, l" c
//+---------------------------------------------------
8 |) O; W" W H! s0 j# ~; k3 x//| 把日期分割成数组
) {1 [! }3 Y U' k//+---------------------------------------------------
$ C9 c" b& u; B# k' e D( t3 w: D& {date.prototype.toarray = function()
$ e* n- P! M' c* V4 D* f{ 2 N$ b3 k. r+ O
var mydate = this;
: e( h$ u' H a" h/ \2 h$ \3 p var myarray = array();
6 K0 b" x* ^# o4 s# Y, X myarray[0] = mydate.getfullyear();
1 P, _ F0 F: Z' T3 k8 [$ _ myarray[1] = mydate.getmonth();
6 l6 P2 }4 Z$ |. {/ N- U( p5 g+ [ myarray[2] = mydate.getdate(); V7 T7 @! W6 J, a
myarray[3] = mydate.gethours(); , ^/ c+ t1 F& S
myarray[4] = mydate.getminutes(); 1 }% w5 P5 k7 i O
myarray[5] = mydate.getseconds(); % P9 k: b% a& A' n
return myarray;
/ X5 n* l# Y. v% `+ K7 M+ D/ x} 6 n( ~# B* k! s" d9 K
//+--------------------------------------------------- $ \+ `8 {1 G: I9 K+ F) F: U
//| 取得日期数据信息
' O0 y/ G- e" m! _: L$ s//| 参数 interval 表示数据类型
3 w$ [6 V) `6 L. B; F//| y 年 m月 d日 w星期 ww周 h时 n分 s秒
7 @4 M( ^2 b( y4 V, @# w! @7 J+ }//+---------------------------------------------------
0 @$ Z0 k* A; T/ R$ y( z4 s; hdate.prototype.datepart = function(interval)
. p: l+ a4 z% b2 z$ Q{
5 j3 L3 L" S1 m var mydate = this;
& b6 x5 n( ]1 @" j4 k) D' G- W var partstr='';
! P* X) b7 z" i: u var week = ['日','一','二','三','四','五','六'];
/ d5 y6 J2 d" N3 H [- } switch (interval) 2 z$ C# i% m' k6 L2 s6 o
{
7 p! Q) W6 q6 Z' k4 ]2 ~ case 'y' :partstr = mydate.getfullyear();break; 2 Z) i* @2 o0 U
case 'm' :partstr = mydate.getmonth()+1;break; ' q: e5 a" d! x3 c# {- S5 @, a
case 'd' :partstr = mydate.getdate();break;
1 r( }8 I2 O; J7 [/ Z% Q5 E/ D case 'w' :partstr = week[mydate.getday()];break;
# E9 n# p6 `' f, d- n case 'ww' :partstr = mydate.weeknumofyear();break;
0 m7 C7 b6 c$ |% e" G: \ case 'h' :partstr = mydate.gethours();break;
1 m% s4 i4 b- x1 S case 'n' :partstr = mydate.getminutes();break; $ Q# E0 K5 [5 [0 b; h
case 's' :partstr = mydate.getseconds();break; ; M- c6 K# F7 V/ [: Z* H" `
}
+ |! H$ c$ M0 Y! w* X: k return partstr;
$ q, K) W+ B! V, x1 [( ], M}
7 c5 ^: Q3 O2 c. b//+--------------------------------------------------- . V e( O( G9 D& }
//| 取得当前日期所在月的最大天数 6 }# m) M7 I6 d. Q5 ]* v
//+---------------------------------------------------
$ V0 I+ F+ c4 k) p9 Xdate.prototype.maxdayofdate = function() & T" }7 N$ i/ h: M+ s! P- x
{
9 q% q% ]7 @* F8 Z. g4 n' H var mydate = this; . I: y3 L: }# d/ r2 g- E
var ary = mydate.toarray();
u, M$ m9 U' L; B$ s# g/ A var date1 = (new date(ary[0],ary[1]+1,1)); 4 h" i, G( |- G
var date2 = date1.dateadd(1,'m',1); 1 \2 P# o6 P: s6 c) Y' |
var result = datediff(date1.format('yyyy-mm-dd'),date2.format('yyyy-mm-dd'));
% O# y4 G) K. i return result; + ?; H2 B& X3 I; p6 u
} 2 \& Y' E' B7 P* O4 z0 g: h' o
//+---------------------------------------------------
! M* c( C6 I: C6 w//| 取得当前日期所在周是一年中的第几周
9 h; r& C7 \, w2 h//+--------------------------------------------------- , P8 h7 z5 m! Y2 R
date.prototype.weeknumofyear = function()
2 K; u/ N2 x& x0 ^& v" M{
4 s% W& {7 h. P; v# } var mydate = this; 7 z& ]4 l* D) Q; J1 R% t
var ary = mydate.toarray();
( S! x+ k* E( p& Z1 e, ]2 w( ` var year = ary[0];
- ^0 ^0 J; t. K5 T3 M var month = ary[1]+1; - K9 U. I( A: j$ K0 P" z
var day = ary[2];
4 q& q, p) C" U2 \ document.write('< script language=vbscript\> \n');
* j! j& Y1 e. h/ p5 t$ q# j document.write('mydate = datevalue(''+month+'-'+day+'-'+year+'') \n');
% a3 ?$ _9 W. d9 _$ a+ m1 i# h document.write('result = datepart('ww', mydate) \n'); + y$ p5 u+ x! Q- r/ [8 s
document.write(' \n');
% j" o/ @ Z5 ]4 ] return result; # ? H4 U+ I/ m* m5 J2 ?) t
} 1 l- \( u9 Z% R( Z
//+---------------------------------------------------
/ D8 b) S7 D( U6 H//| 字符串转成日期类型
. {7 e: H+ d) g7 B6 h//| 格式 mm/dd/yyyy mm-dd-yyyy yyyy/mm/dd yyyy-mm-dd
3 h4 e6 b* Z6 P: Z//+---------------------------------------------------
- v5 u" P6 ^3 Kfunction stringtodate(datestr)
8 p$ m" C) J# P& V4 s6 ]: o( q J{ ; I1 @9 Z- S P% L# N
var converted = date.parse(datestr);
* R& B0 ?; b% |/ }) ~! E/ \ var mydate = new date(converted);
. W0 n8 R+ Z# g if (isnan(mydate)) # `3 t; S% ]" u P) e
{ ; B/ }7 ]* }' A: r
//var delimcahar = datestr.indexof('/')!=-1?'/':'-';
: F& i5 R+ R# u0 Y$ i var arys= datestr.split('-'); 8 Q% _8 F- o' P N3 D1 K+ t1 ]
mydate = new date(arys[0],--arys[1],arys[2]);
0 C- X, z7 w! h+ [* N }
$ v. O4 `- B. u& D+ ?& Z3 u return mydate; 3 Q. X2 p! o1 t7 d/ H/ y
} % m8 }/ X: w' L% t4 {
5 c2 M: V; V* i: V0 y+ F更多网页制作信息请查看: 网页制作 |
|