javascript中对Date类型的常用操作小结
程序员文章站
2023-11-26 12:33:04
javascript中对date类型的常用操作小结
/**
3. * 日期时间脚本库方法列表:
4. * (1)date.isvalidate:日期合法性...
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类型的常用操作小结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。