javascript中对Date类型的常用操作小结
javascript中对Date类型的常用操作小结
/**
3.*日期时间脚本库方法列表:
4.*(1)Date.isValiDate:日期合法性验证
5.*(2)Date.isValiTime:时间合法性验证
6.*(3)Date.isValiDateTime:日期和时间合法性验证
7.*(4)Date.prototype.isLeapYear:判断是否闰年
8.*(5)Date.prototype.format:日期格式化
9.*(6)Date.stringToDate:字符串转成日期类型
10.*(7)Date.daysBetween:计算两个日期的天数差
11.*(8)Date.prototype.dateAdd:日期计算,支持正负数
12.*(9)Date.prototype.dateDiff:比较日期差:比较两个时期相同的字段,返回相差值
13.*(10)Date.prototype.toArray:把日期分割成数组:按数组序号分别为:年月日时分秒
14.*(11)Date.prototype.datePart:取得日期数据信息
15.*/
16.
17.
18./**
19.*日期合法性验证:判断dataStr是否符合formatStr指定的日期格式
20.*示例:
21.*(1)alert(Date.isValiDate('2008-02-29','yyyy-MM-dd'));//true
22.*(2)alert(Date.isValiDate('aaaa-58-29','yyyy-MM-dd'));//false
23.*dateStr:必选,日期字符串
24.*formatStr:可选,格式字符串,可选格式有:(1)yyyy-MM-dd(默认格式)或YYYY-MM-DD(2)yyyy/MM/dd或YYYY/MM/DD(3)MM-dd-yyyy或MM-DD-YYYY(4)MM/dd/yyyy或MM/DD/YYYY
25.*/
26.Date.isValiDate=function(dateStr,formatStr)
27.{
28.if(!dateStr){
29.returnfalse;
30.}
31.if(!formatStr){
32.formatStr="yyyy-MM-dd";//默认格式:yyyy-MM-dd
33.}
34.if(dateStr.length!=formatStr.length){
35.returnfalse;
36.}else{
37.if(formatStr=="yyyy-MM-dd"||formatStr=="YYYY-MM-DD"){
38.varr1=/^(((((([02468][048])|([13579][26]))(00))|(\d{2}(([02468][48])|([13579][26]))))\-((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-([0-2][0-9]))))|(\d{2}(([02468][1235679])|([13579][01345789]))\-((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-(([0-1][0-9])|(2[0-8]))))))$/;
39.returnr1.test(dateStr);
40.}elseif(formatStr=="yyyy/MM/dd"||formatStr=="YYYY/MM/DD"){
41.varr2=/^(((((([02468][048])|([13579][26]))(00))|(\d{2}(([02468][48])|([13579][26]))))\/((((0[13578])|(1[02]))\/(([0-2][0-9])|(3[01])))|(((0[469])|(11))\/(([0-2][0-9])|(30)))|(02\/([0-2][0-9]))))|(\d{2}(([02468][1235679])|([13579][01345789]))\/((((0[13578])|(1[02]))\/(([0-2][0-9])|(3[01])))|(((0[469])|(11))\/(([0-2][0-9])|(30)))|(02\/(([0-1][0-9])|(2[0-8]))))))$/;
42.returnr2.test(dateStr);
43.}elseif(formatStr=="MM-dd-yyyy"||formatStr=="MM-DD-YYYY"){
44.varr3=/^((((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-([0-2][0-9])))\-(((([02468][048])|([13579][26]))(00))|(\d{2}(([02468][48])|([13579][26])))))|(((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-(([0-1][0-9])|(2[0-8])))))\-\d{2}(([02468][1235679])|([13579][01345789])))$/;
45.returnr3.test(dateStr);
46.}elseif(formatStr=="MM/dd/yyyy"||formatStr=="MM/DD/YYYY"){
47.varr4=/^((((((0[13578])|(1[02]))\/(([0-2][0-9])|(3[01])))|(((0[469])|(11))\/(([0-2][0-9])|(30)))|(02\/([0-2][0-9])))\/(((([02468][048])|([13579][26]))(00))|(\d{2}(([02468][48])|([13579][26])))))|(((((0[13578])|(1[02]))\/(([0-2][0-9])|(3[01])))|(((0[469])|(11))\/(([0-2][0-9])|(30)))|(02\/(([0-1][0-9])|(2[0-8])))))\/\d{2}(([02468][1235679])|([13579][01345789])))$/;
48.returnr4.test(dateStr);
49.}else{
50.alert("日期格式不正确!");
51.returnfalse;
52.}
53.}
54.returnfalse;
55.}
56.
57.
58./**
59.*时间合法性验证:判断timeStr是否符合formatStr指定的时间格式
60.*示例:
61.*(1)alert(Date.isValiTime('23:59:59','hh:mm:ss'));//true
62.*(2)alert(Date.isValiTime('24-68-89','hh:mm:ss'));//false
63.*timeStr:必选,日期字符串
64.*formatStr:可选,格式字符串,可选格式有:(1)hh:mm:ss(默认格式)(2)hh-mm-ss(3)hh/mm/ss
65.*/
66.Date.isValiTime=function(timeStr,formatStr)
67.{
68.if(!timeStr){
69.returnfalse;
70.}
71.if(!formatStr){
72.formatStr="hh:mm:ss";//默认格式:hh:mm:ss
73.}
74.if(timeStr.length!=formatStr.length){
75.returnfalse;
76.}else{
77.if(formatStr=="hh:mm:ss"){
78.varr1=/^(([0-1][0-9])|(2[0-3]))\:([0-5][0-9])\:([0-5][0-9])$/;
79.returnr1.test(timeStr);
80.}elseif(formatStr=="hh-mm-ss"){
81.varr2=/^(([0-1][0-9])|(2[0-3]))\-([0-5][0-9])\-([0-5][0-9])$/;
82.returnr2.test(timeStr);
83.}elseif(formatStr=="hh/mm/ss"){
84.varr3=/^(([0-1][0-9])|(2[0-3]))\/([0-5][0-9])\/([0-5][0-9])$/;
85.returnr3.test(timeStr);
86.}else{
87.alert("时间格式不正确!");
88.returnfalse;
89.}
90.}
91.returnfalse;
92.}
93.
94.
95./**
96.*日期和时间合法性验证
97.*格式:yyyy-MM-ddhh:mm:ss
98.*/
99.Date.isValiDateTime=function(dateTimeStr)
100.{
101.vardateTimeReg=/^(((((([02468][048])|([13579][26]))(00))|(\d{2}(([02468][48])|([13579][26]))))\-((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-([0-2][0-9]))))|(\d{2}(([02468][1235679])|([13579][01345789]))\-((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-(([0-1][0-9])|(2[0-8]))))))(\s{1}(([0-1][0-9])|(2[0-3]))\:([0-5][0-9])\:([0-5][0-9]))?$/
102.returndateTimeReg.test(dateTimeStr);
103.}
104.
105.
106./**
107.*判断闰年:一般规律为:四年一闰,百年不闰,四百年再闰。
108.*/
109.Date.prototype.isLeapYear=function()
110.{
111.return(this.getYear()%4==0&&((this.getYear()%100!=0)||(this.getYear()%400==0)));
112.}
113.
114.
115./**
116.*日期格式化:
117.*formatStr:可选,格式字符串,默认格式:yyyy-MM-ddhh:mm:ss
118.*约定如下格式:
119.*(1)YYYY/yyyy/YY/yy表示年份
120.*(2)MM/M月份
121.*(3)W/w星期
122.*(4)dd/DD/d/D日期
123.*(5)hh/HH/h/H时间
124.*(6)mm/m分钟
125.*(7)ss/SS/s/S秒
126.*(8)iii毫秒
127.*/
128.Date.prototype.format=function(formatStr)
129.{
130.varstr=formatStr;
131.if(!formatStr){
132.str="yyyy-MM-ddhh:mm:ss";//默认格式
133.}
134.varWeek=['日','一','二','三','四','五','六'];
135.
136.str=str.replace(/yyyy|YYYY/,this.getFullYear());
137.str=str.replace(/yy|YY/,(this.getYear()%100)>9?(this.getYear()%100).toString():'0'+(this.getYear()%100));
138.
139.str=str.replace(/MM/,this.getMonth()>=9?(parseInt(this.getMonth())+1).toString():'0'+(parseInt(this.getMonth())+1));
140.str=str.replace(/M/g,(parseInt(this.getMonth())+1));
141.
142.str=str.replace(/w|W/g,Week[this.getDay()]);
143.
144.str=str.replace(/dd|DD/,this.getDate()>9?this.getDate().toString():'0'+this.getDate());
145.str=str.replace(/d|D/g,this.getDate());
146.
147.str=str.replace(/hh|HH/,this.getHours()>9?this.getHours().toString():'0'+this.getHours());
148.str=str.replace(/h|H/g,this.getHours());
149.str=str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():'0'+this.getMinutes());
150.str=str.replace(/m/g,this.getMinutes());
151.
152.str=str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():'0'+this.getSeconds());
153.str=str.replace(/s|S/g,this.getSeconds());
154.
155.str=str.replace(/iii/g,this.getMilliseconds()<10?'00'+this.getMilliseconds():(this.getMilliseconds()<100?'0'+this.getMilliseconds():this.getMilliseconds()));
156.
157.returnstr;
158.}
159.
160.
161./**
162.*字符串转成日期类型:
163.*dateStr:必选,日期字符串,如果无法解析成日期类型,返回null
164.*格式:
165.*(1)yyyy/MM/dd:IE和FF通用
166.*(2)MM/dd/yyyy:IE和FF通用
167.*(3)MM-dd-yyyy:仅IE
168.*(4)yyyy-MM-dd:非IE,且时钟被解析在8点整
169.*/
170.Date.stringToDate=function(dateStr)
171.{
172.if(!dateStr){
173.alert("字符串无法解析为日期");
174.returnnull;
175.}else{
176.if(Date.isValiDate(dateStr,"yyyy/MM/dd")||Date.isValiDate(dateStr,"MM/dd/yyyy")){
177.returnnewDate(Date.parse(dateStr));
178.}else{
179.if((!-[1,])){//IE
180.if(Date.isValiDate(dateStr,"MM-dd-yyyy")){
181.returnnewDate(Date.parse(dateStr));
182.}else{
183.alert("字符串无法解析为日期");
184.returnnull;
185.}
186.}else{//非IE
187.if(Date.isValiDate(dateStr,"yyyy-MM-dd")){
188.returnnewDate(Date.parse(dateStr));
189.}else{
190.alert("字符串无法解析为日期");
191.returnnull;
192.}
193.}
194.}
195.}
196.returnnull;
197.}
198.
199.
200./**
201.*计算两个日期的天数差:
202.*dateOne:必选,必须是Data类型的实例
203.*dateTwo:必选,必须是Data类型的实例
204.*/
205.Date.daysBetween=function(dateOne,dateTwo)
206.{
207.if((dateOneinstanceofDate)==false||(dateTwoinstanceofDate)==false){
208.return0;
209.}else{
210.returnMath.abs(Math.floor((dateOne.getTime()-dateTwo.getTime())/1000/60/60/24));
211.}
212.}
213.
214.
215./**
216.*日期计算:支持负数,即可加可减,返回计算后的日期
217.*num:必选,必须是数字,且正数是时期加,负数是日期减
218.*field:可选,标识是在哪个字段上进行相加或相减,字段见如下的约定。无此参数时,默认为d
219.*约定如下格式:
220.*(1)Y/y年
221.*(2)M月
222.*(3)W/w周
223.*(4)D/d日
224.*(5)H/h时
225.*(6)m分
226.*(7)S/s秒
227.*(8)Q/q季
228.*/
229.Date.prototype.dateAdd=function(num,field)
230.{
231.if((!num)||isNaN(num)||parseInt(num)==0){
232.returnthis;
233.}
234.if(!field){
235.field="d";
236.}
237.switch(field){
238.case'Y':
239.case'y':returnnewDate((this.getFullYear()+num),this.getMonth(),this.getDate(),this.getHours(),this.getMinutes(),this.getSeconds());break;
240.case'Q':
241.case'q':returnnewDate(this.getFullYear(),(this.getMonth()+num*3),this.getDate(),this.getHours(),this.getMinutes(),this.getSeconds());break;
242.case'M':returnnewDate(this.getFullYear(),this.getMonth()+num,this.getDate(),this.getHours(),this.getMinutes(),this.getSeconds());break;
243.case'W':
244.case'w':returnnewDate(Date.parse(this)+((86400000*7)*num));break;
245.case'D':
246.case'd':returnnewDate(Date.parse(this)+(86400000*num));break;
247.case'H':
248.case'h':returnnewDate(Date.parse(this)+(3600000*num));break;
249.case'm':returnnewDate(Date.parse(this)+(60000*num));break;
250.case'S':
251.case's':returnnewDate(Date.parse(this)+(1000*num));break;
252.default:returnthis;
253.}
254.returnthis;
255.}
256.
257.
258./**
259.*比较日期差:比较两个时期相同的字段,返回相差值
260.*dtEnd:必选,必须是Data类型的实例
261.*field:可选,标识是在哪个字段上进行比较,字段见如下的约定。无此参数时,默认为d
262.*约定如下格式:
263.*(1)Y/y年
264.*(2)M月
265.*(3)W/w周
266.*(4)D/d日
267.*(5)H/h时
268.*(6)m分
269.*(7)S/s秒
270.*/
271.Date.prototype.dateDiff=function(dtEnd,field)
272.{
273.vardtStart=this;
274.if((dtEndinstanceofDate)==false){
275.return0;
276.}else{
277.if(!field){
278.field="d";
279.}
280.switch(field){
281.case'Y':
282.case'y':returndtEnd.getFullYear()-dtStart.getFullYear();break;
283.case'M':return(dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12)-(dtStart.getMonth()+1);break;
284.case'W':
285.case'w':returnparseInt((dtEnd-dtStart)/(86400000*7));break;
286.case'D':
287.case'd':returnparseInt((dtEnd-dtStart)/86400000);break;
288.case'H':
289.case'h':returnparseInt((dtEnd-dtStart)/3600000);break;
290.case'm':returnparseInt((dtEnd-dtStart)/60000);break;
291.case'S':
292.case's':returnparseInt((dtEnd-dtStart)/1000);break;
293.default:return0;
294.}
295.return0;
296.}
297.}
298.
299.
300./**
301.*把日期分割成数组:按数组序号分别为:年月日时分秒
302.*/
303.Date.prototype.toArray=function()
304.{
305.varmyArray=newArray();
306.myArray[0]=this.getFullYear();
307.myArray[1]=this.getMonth();
308.myArray[2]=this.getDate();
309.myArray[3]=this.getHours();
310.myArray[4]=this.getMinutes();
311.myArray[5]=this.getSeconds();
312.returnmyArray;
313.}
314.
315.
316./**
317.*取得日期数据信息:
318.*field:可选,标识是在哪个字段上进行比较,字段见如下的约定。无此参数时,默认为d
319.*(1)Y/y年
320.*(2)M月
321.*(3)W/w周
322.*(4)D/d日
323.*(5)H/h时
324.*(6)m分
325.*(7)S/s秒
326.*/
327.Date.prototype.datePart=function(field)
328.{
329.if(!field){
330.field="d";
331.}
332.varWeek=['日','一','二','三','四','五','六'];
333.switch(field){
334.case'Y':
335.case'y':returnthis.getFullYear();break;
336.case'M':return(this.getMonth()+1);break;
337.case'W':
338.case'w':returnWeek[this.getDay()];break;
339.case'D':
340.case'd':returnthis.getDate();break;
341.case'H':
342.case'h':returnthis.getHours();break;
343.case'm':returnthis.getMinutes();break;
344.case's':returnthis.getSeconds();break;
345.default:returnthis.getDate();
346.}
347.returnthis.getDate();
348.}
以上这篇javascript中对Date类型的常用操作小结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。