当前位置: 移动技术网 > IT编程>开发语言>JavaScript > javascript中对Date类型的常用操作小结

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

2019年07月30日  | 移动技术网IT编程  | 我要评论

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类型的常用操作小结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网