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 相关文章推荐
jQuery$命名冲突怎么办如何解决
Jan 16 Javascript
node.js中的fs.fsyncSync方法使用说明
Dec 15 Javascript
基于AngularJS+HTML+Groovy实现登录功能
Feb 17 Javascript
jquery 获取select数组与name数组长度的实现代码
Jun 20 Javascript
AngularJS实用开发技巧(推荐)
Jul 13 Javascript
Node.js检测端口(port)是否被占用的简单示例
Sep 29 Javascript
JavaScript利用正则表达式替换字符串中的内容
Dec 12 Javascript
Angular2学习教程之组件中的DOM操作详解
May 28 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
Aug 01 jQuery
详解vue 组件的实现原理
Nov 12 Javascript
解决js中的setInterval清空定时器不管用问题
Nov 17 Javascript
JavaScript阻止事件冒泡的方法
Dec 06 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 Undefined index的问题
2009/06/01 PHP
php中在PDO中使用事务(Transaction)
2011/05/14 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
javascript网页关键字高亮代码
2008/07/30 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
学习JavaScript设计模式之状态模式
2016/01/08 Javascript
JavaScript中通过提示框跳转页面的方法
2016/02/14 Javascript
AngularJs Dependency Injection(DI,依赖注入)
2016/09/02 Javascript
Javascript从数组中随机取出不同元素的两种方法
2016/09/22 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
2017/05/22 Javascript
ajax前台后台跨域请求处理方式
2018/02/08 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
vue指令做滚动加载和监听等
2019/05/26 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
2020/08/14 Javascript
django 按时间范围查询数据库实例代码
2018/02/11 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
采购主管岗位职责
2014/02/01 职场文书
环保项目建议书
2014/08/26 职场文书
小学教师师德整改措施
2014/09/29 职场文书
银行授权委托书范本
2014/10/04 职场文书
个性发展自我评价2015
2015/03/09 职场文书
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android
OpenCV实现常见的四种图像几何变换
2022/04/01 Python