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


Posted in Javascript onMay 19, 2016

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

Javascript 相关文章推荐
Javascript Cookie读写删除操作的函数
Mar 02 Javascript
javascript object array方法使用详解
Dec 03 Javascript
JS中表单的使用小结
Jan 11 Javascript
一款由jquery实现的整屏切换特效
Sep 15 Javascript
node.js中的fs.realpath方法使用说明
Dec 16 Javascript
浅谈jquery回调函数callback的使用
Jan 30 Javascript
JS实现很酷的水波文字特效实例
Feb 26 Javascript
jQuery实现鼠标点击弹出渐变层的方法
Jul 09 Javascript
javascript每日必学之继承
Feb 23 Javascript
canvas绘制的直线动画
Jan 23 Javascript
详解vue使用插槽分发内容slot的用法
Mar 28 Javascript
Node.js 中判断一个文件是否存在
Aug 24 Javascript
JS Attribute属性操作详解
May 19 #Javascript
jQuery点击输入框显示验证码图片
May 19 #Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
May 18 #Javascript
Node.js刷新session过期时间的实现方法推荐
May 18 #Javascript
JS+Canvas 实现下雨下雪效果
May 18 #Javascript
如何判断Javascript对象是否存在的简单实例
May 18 #Javascript
jquery遍历json对象集合详解
May 18 #Javascript
You might like
如何获得PHP相关资料
2006/10/09 PHP
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
两个数组去重的JS代码
2013/12/04 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
JS中对Cookie的操作详解
2016/08/05 Javascript
form表单转Json提交的方法(推荐)
2016/09/23 Javascript
Jq通过td获取同行其它列td的方法
2016/10/05 Javascript
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
Python编程中装饰器的使用示例解析
2016/06/20 Python
Python高级特性——详解多维数组切片(Slice)
2019/11/26 Python
使用 Python ssh 远程登陆服务器的最佳方案
2020/03/06 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
高性能装备提升营地:Kammok
2019/02/27 全球购物
营销人才自我鉴定范文
2013/12/25 职场文书
信息管理应届生求职信
2014/03/07 职场文书
家长学校实施方案
2014/03/15 职场文书
员工入职担保书范文
2014/04/01 职场文书
企业新年寄语
2014/04/04 职场文书
个人自荐书范文
2015/03/09 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
离婚答辩状怎么写
2015/05/22 职场文书