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的二级联动菜单实现代码
Apr 25 Javascript
Android中资源文件(非代码部分)的使用概览
Dec 18 Javascript
jquery统计输入文字的个数并对其进行判断
Jan 07 Javascript
JavaScript版的TwoQueues缓存模型
Dec 29 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
Nov 30 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
Dec 04 Javascript
js 判断各种数据类型的简单方法(推荐)
Aug 29 Javascript
详解Vue中状态管理Vuex
May 11 Javascript
利用node.js如何搭建一个简易的即时响应服务器
May 28 Javascript
Vue.extend构造器的详解
Jul 17 Javascript
JS引用传递与值传递的区别与用法分析
Jun 01 Javascript
用webpack4开发小程序的实现方法
Jun 04 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 socket编程
2015/05/13 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
php实现文件预览功能
2017/05/23 PHP
PHP中单例模式的使用场景与使用方法讲解
2019/03/18 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
Jquery中对数组的操作代码
2011/08/12 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
2014/07/29 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
jQuery实现返回顶部效果的方法
2015/05/29 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
基于vue实现简易打地鼠游戏
2020/08/21 Javascript
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
centos6.7安装python2.7.11的具体方法
2017/01/16 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
Python读取本地文件并解析网页元素的方法
2018/05/21 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
2019/07/11 Python
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
Linux如何压缩可执行文件
2014/03/27 面试题
如何利用cmp命令比较文件
2013/09/23 面试题
生物化学研究助理员求职信
2013/10/09 职场文书
批评与自我批评材料
2014/02/15 职场文书
卫生标语大全
2014/06/21 职场文书
求职信的正确写法
2014/07/10 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
二手房购房意向书
2015/05/09 职场文书
JavaScript实例 ODO List分析
2022/01/22 Javascript