欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

javascript中对Date类型的常用操作小结

程序员文章站 2023-11-26 12:33:04
javascript中对date类型的常用操作小结 /** 3. * 日期时间脚本库方法列表: 4. * (1)date.isvalidate:日期合法性...

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.    return false; 
30.  } 
31.  if(!formatstr){ 
32.    formatstr = "yyyy-mm-dd";//默认格式:yyyy-mm-dd  
33.  } 
34.  if(datestr.length!=formatstr.length){ 
35.    return false; 
36.  }else{ 
37.    if(formatstr=="yyyy-mm-dd"||formatstr=="yyyy-mm-dd"){ 
38.      var r1=/^(((((([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.      return r1.test(datestr); 
40.    }else if(formatstr=="yyyy/mm/dd"||formatstr=="yyyy/mm/dd"){ 
41.      var r2=/^(((((([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.      return r2.test(datestr); 
43.    }else if(formatstr=="mm-dd-yyyy"||formatstr=="mm-dd-yyyy"){ 
44.      var r3=/^((((((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.      return r3.test(datestr); 
46.    }else if(formatstr=="mm/dd/yyyy"||formatstr=="mm/dd/yyyy"){ 
47.      var r4=/^((((((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.      return r4.test(datestr); 
49.    }else{ 
50.      alert("日期格式不正确!"); 
51.      return false; 
52.    } 
53.  } 
54.  return false; 
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.    return false; 
70.  } 
71.  if(!formatstr){ 
72.    formatstr = "hh:mm:ss";//默认格式:hh:mm:ss  
73.  } 
74.  if(timestr.length!=formatstr.length){ 
75.    return false; 
76.  }else{ 
77.    if(formatstr=="hh:mm:ss"){ 
78.      var r1=/^(([0-1][0-9])|(2[0-3]))\:([0-5][0-9])\:([0-5][0-9])$/; 
79.      return r1.test(timestr); 
80.    }else if(formatstr=="hh-mm-ss"){ 
81.      var r2=/^(([0-1][0-9])|(2[0-3]))\-([0-5][0-9])\-([0-5][0-9])$/; 
82.      return r2.test(timestr); 
83.    }else if(formatstr=="hh/mm/ss"){ 
84.      var r3=/^(([0-1][0-9])|(2[0-3]))\/([0-5][0-9])\/([0-5][0-9])$/; 
85.      return r3.test(timestr); 
86.    }else{ 
87.      alert("时间格式不正确!"); 
88.      return false; 
89.    } 
90.  } 
91.  return false; 
92.} 
93. 
94. 
95./** 
96. * 日期和时间合法性验证 
97. * 格式:yyyy-mm-dd hh:mm:ss 
98. */ 
99.date.isvalidatetime = function(datetimestr) 
100.{ 
101.  var datetimereg=/^(((((([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.  return datetimereg.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-dd hh: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.  var str = formatstr; 
131.  if(!formatstr){ 
132.    str = "yyyy-mm-dd hh:mm:ss";//默认格式  
133.  } 
134.  var week = ['日','一','二','三','四','五','六']; 
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.  return str; 
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.    return null; 
175.  }else{ 
176.    if(date.isvalidate(datestr,"yyyy/mm/dd")||date.isvalidate(datestr,"mm/dd/yyyy")){ 
177.      return new date(date.parse(datestr)); 
178.    }else{ 
179.      if((!-[1,])){//ie  
180.        if(date.isvalidate(datestr,"mm-dd-yyyy")){ 
181.          return new date(date.parse(datestr)); 
182.        }else{ 
183.          alert("字符串无法解析为日期"); 
184.          return null; 
185.        } 
186.      }else{//非ie  
187.        if(date.isvalidate(datestr,"yyyy-mm-dd")){ 
188.          return new date(date.parse(datestr)); 
189.        }else{ 
190.          alert("字符串无法解析为日期"); 
191.          return null; 
192.        } 
193.      } 
194.    } 
195.  } 
196.  return null; 
197.} 
198. 
199. 
200./** 
201. * 计算两个日期的天数差: 
202. * dateone:必选,必须是data类型的实例 
203. * datetwo:必选,必须是data类型的实例 
204. */ 
205.date.daysbetween = function(dateone,datetwo) 
206.{ 
207.  if((dateone instanceof date)==false||(datetwo instanceof date)==false){ 
208.    return 0; 
209.  }else{ 
210.    return math.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.    return this; 
233.  } 
234.  if(!field){ 
235.    field = "d"; 
236.  } 
237.  switch(field){ 
238.    case 'y': 
239.    case 'y':return new date((this.getfullyear()+num), this.getmonth(), this.getdate(), this.gethours(), this.getminutes(), this.getseconds());break; 
240.    case 'q': 
241.    case 'q':return new date(this.getfullyear(), (this.getmonth()+num*3), this.getdate(), this.gethours(), this.getminutes(), this.getseconds());break; 
242.    case 'm':return new date(this.getfullyear(), this.getmonth()+num, this.getdate(), this.gethours(), this.getminutes(), this.getseconds());break; 
243.    case 'w': 
244.    case 'w':return new date(date.parse(this) + ((86400000 * 7) * num));break; 
245.    case 'd': 
246.    case 'd':return new date(date.parse(this) + (86400000 * num));break; 
247.    case 'h': 
248.    case 'h':return new date(date.parse(this) + (3600000 * num));break; 
249.    case 'm':return new date(date.parse(this) + (60000 * num));break; 
250.    case 's': 
251.    case 's':return new date(date.parse(this) + (1000 * num));break; 
252.    default: return this; 
253.  } 
254.  return this; 
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.  var dtstart = this; 
274.  if((dtend instanceof date)==false){ 
275.    return 0; 
276.  }else{ 
277.    if(!field){ 
278.      field = "d"; 
279.    } 
280.    switch(field){ 
281.      case 'y': 
282.      case 'y':return dtend.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':return parseint((dtend - dtstart) / (86400000 * 7));break; 
286.      case 'd': 
287.      case 'd':return parseint((dtend - dtstart) / 86400000);break; 
288.      case 'h': 
289.      case 'h':return parseint((dtend - dtstart) / 3600000);break; 
290.      case 'm':return parseint((dtend - dtstart) / 60000);break; 
291.      case 's': 
292.      case 's':return parseint((dtend - dtstart) / 1000);break; 
293.      default: return 0; 
294.    } 
295.    return 0; 
296.  } 
297.} 
298. 
299. 
300./** 
301. * 把日期分割成数组:按数组序号分别为:年月日时分秒 
302. */ 
303.date.prototype.toarray = function() 
304.{ 
305.  var myarray = new array(); 
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.  return myarray; 
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.  var week = ['日','一','二','三','四','五','六']; 
333.  switch (field){ 
334.    case 'y' : 
335.    case 'y' :return this.getfullyear();break; 
336.    case 'm' :return (this.getmonth()+1);break; 
337.    case 'w' : 
338.    case 'w' :return week[this.getday()];break; 
339.    case 'd' : 
340.    case 'd' :return this.getdate();break; 
341.    case 'h' : 
342.    case 'h' :return this.gethours();break; 
343.    case 'm' :return this.getminutes();break; 
344.    case 's' :return this.getseconds();break; 
345.    default:return this.getdate(); 
346.  } 
347.  return this.getdate(); 
348.} 

以上这篇javascript中对date类型的常用操作小结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。