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中使用开平方根的sqrt()方法
Jun 15 Javascript
json格式数据的添加,删除及排序方法
Jan 21 Javascript
详解jQuery中基本的动画方法
Dec 14 Javascript
微信小程序 自己制作小组件实例详解
Dec 22 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
Jun 20 Javascript
vue 运用mock数据的示例代码
Nov 07 Javascript
jquery实现动态添加附件功能
Oct 23 jQuery
vue组件tabbar使用方法详解
Nov 06 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
May 23 Javascript
layui实现给某一列加点击事件
Oct 26 Javascript
Swiper实现导航栏滚动效果
Oct 16 Javascript
如何使用原生Js实现随机点名详解
Jan 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的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
浅谈PHP封装CURL
2019/03/06 PHP
使一个函数作为另外一个函数的参数来运行的javascript代码
2007/08/13 Javascript
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
Javascript hasOwnProperty 方法 &amp; in 关键字
2008/11/26 Javascript
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
2016/06/12 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
HTML的select控件美化
2017/03/27 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
解决vue项目 build之后资源文件找不到的问题
2020/09/12 Javascript
JavaScript 常见的继承方式汇总
2020/09/17 Javascript
Python中__call__用法实例
2014/08/29 Python
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
2019/08/07 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
资源环境与城市管理专业推荐信
2013/11/30 职场文书
家具厂厂长岗位职责
2014/01/01 职场文书
运动会通讯稿100字
2014/01/31 职场文书
煤矿安全保证书
2015/02/27 职场文书
宇宙与人观后感
2015/06/05 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS