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 相关文章推荐
imgAreaSelect 中文文档帮助说明
Oct 08 Javascript
js跳转页面方法实现汇总
Feb 11 Javascript
javascript中不提供sleep功能如何实现这个功能
May 27 Javascript
javascript数组操作方法小结和3个属性详细介绍
Jul 05 Javascript
JavaScript检测实例属性, 原型属性
Feb 04 Javascript
javascript实现验证IP地址等相关信息代码
May 10 Javascript
javascript学习总结之js使用技巧
Sep 02 Javascript
原生JavaScript制作计算器
Oct 16 Javascript
详解能在多种前端框架下使用的表格控件
Jan 11 Javascript
Vue-router 中hash模式和history模式的区别
Jul 24 Javascript
vue使用微信JS-SDK实现分享功能
Aug 23 Javascript
详解微信小程序之提高应用速度小技巧
Jan 07 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/12/06 PHP
php数组保存文本与文本反编成数组实例
2014/11/13 PHP
全面解析PHP验证码的实现原理 附php验证码小案例
2016/08/17 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
javascript OFFICE控件测试代码
2009/12/08 Javascript
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
python django 实现验证码的功能实例代码
2017/05/18 Python
浅谈python中的占位符
2017/11/09 Python
python 识别图片中的文字信息方法
2018/05/10 Python
python画一个玫瑰和一个爱心
2020/08/18 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
html5将图片转换成base64的实例代码
2016/09/21 HTML / CSS
使用HTML5和CSS3制作一个模态框的示例
2018/03/07 HTML / CSS
HTML文本属性&amp;颜色控制属性的实现
2019/12/17 HTML / CSS
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
最新销售员个人自荐信
2013/09/21 职场文书
架构师岗位职责
2013/11/18 职场文书
五四演讲稿范文
2014/09/03 职场文书
爱护公物演讲稿
2014/09/09 职场文书
房产授权委托书范本
2014/09/22 职场文书
家庭财产分割协议范文
2014/11/24 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL
面试被问select......for update会锁表还是锁行
2021/11/11 MySQL