javascript中对Date类型的常用操作小结
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.returnfalse; 30.} 31.if(!formatStr){ 32.formatStr="yyyy-MM-dd";//默认格式:yyyy-MM-dd 33.} 34.if(dateStr.length!=formatStr.length){ 35.returnfalse; 36.}else{ 37.if(formatStr=="yyyy-MM-dd"||formatStr=="YYYY-MM-DD"){ 38.varr1=/^(((((([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.returnr1.test(dateStr); 40.}elseif(formatStr=="yyyy/MM/dd"||formatStr=="YYYY/MM/DD"){ 41.varr2=/^(((((([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.returnr2.test(dateStr); 43.}elseif(formatStr=="MM-dd-yyyy"||formatStr=="MM-DD-YYYY"){ 44.varr3=/^((((((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.returnr3.test(dateStr); 46.}elseif(formatStr=="MM/dd/yyyy"||formatStr=="MM/DD/YYYY"){ 47.varr4=/^((((((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.returnr4.test(dateStr); 49.}else{ 50.alert("日期格式不正确!"); 51.returnfalse; 52.} 53.} 54.returnfalse; 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.returnfalse; 70.} 71.if(!formatStr){ 72.formatStr="hh:mm:ss";//默认格式:hh:mm:ss 73.} 74.if(timeStr.length!=formatStr.length){ 75.returnfalse; 76.}else{ 77.if(formatStr=="hh:mm:ss"){ 78.varr1=/^(([0-1][0-9])|(2[0-3]))\:([0-5][0-9])\:([0-5][0-9])$/; 79.returnr1.test(timeStr); 80.}elseif(formatStr=="hh-mm-ss"){ 81.varr2=/^(([0-1][0-9])|(2[0-3]))\-([0-5][0-9])\-([0-5][0-9])$/; 82.returnr2.test(timeStr); 83.}elseif(formatStr=="hh/mm/ss"){ 84.varr3=/^(([0-1][0-9])|(2[0-3]))\/([0-5][0-9])\/([0-5][0-9])$/; 85.returnr3.test(timeStr); 86.}else{ 87.alert("时间格式不正确!"); 88.returnfalse; 89.} 90.} 91.returnfalse; 92.} 93. 94. 95./** 96.*日期和时间合法性验证 97.*格式:yyyy-MM-ddhh:mm:ss 98.*/ 99.Date.isValiDateTime=function(dateTimeStr) 100.{ 101.vardateTimeReg=/^(((((([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.returndateTimeReg.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-ddhh: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.varstr=formatStr; 131.if(!formatStr){ 132.str="yyyy-MM-ddhh:mm:ss";//默认格式 133.} 134.varWeek=['日','一','二','三','四','五','六']; 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.returnstr; 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.returnnull; 175.}else{ 176.if(Date.isValiDate(dateStr,"yyyy/MM/dd")||Date.isValiDate(dateStr,"MM/dd/yyyy")){ 177.returnnewDate(Date.parse(dateStr)); 178.}else{ 179.if((!-[1,])){//IE 180.if(Date.isValiDate(dateStr,"MM-dd-yyyy")){ 181.returnnewDate(Date.parse(dateStr)); 182.}else{ 183.alert("字符串无法解析为日期"); 184.returnnull; 185.} 186.}else{//非IE 187.if(Date.isValiDate(dateStr,"yyyy-MM-dd")){ 188.returnnewDate(Date.parse(dateStr)); 189.}else{ 190.alert("字符串无法解析为日期"); 191.returnnull; 192.} 193.} 194.} 195.} 196.returnnull; 197.} 198. 199. 200./** 201.*计算两个日期的天数差: 202.*dateOne:必选,必须是Data类型的实例 203.*dateTwo:必选,必须是Data类型的实例 204.*/ 205.Date.daysBetween=function(dateOne,dateTwo) 206.{ 207.if((dateOneinstanceofDate)==false||(dateTwoinstanceofDate)==false){ 208.return0; 209.}else{ 210.returnMath.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.returnthis; 233.} 234.if(!field){ 235.field="d"; 236.} 237.switch(field){ 238.case'Y': 239.case'y':returnnewDate((this.getFullYear()+num),this.getMonth(),this.getDate(),this.getHours(),this.getMinutes(),this.getSeconds());break; 240.case'Q': 241.case'q':returnnewDate(this.getFullYear(),(this.getMonth()+num*3),this.getDate(),this.getHours(),this.getMinutes(),this.getSeconds());break; 242.case'M':returnnewDate(this.getFullYear(),this.getMonth()+num,this.getDate(),this.getHours(),this.getMinutes(),this.getSeconds());break; 243.case'W': 244.case'w':returnnewDate(Date.parse(this)+((86400000*7)*num));break; 245.case'D': 246.case'd':returnnewDate(Date.parse(this)+(86400000*num));break; 247.case'H': 248.case'h':returnnewDate(Date.parse(this)+(3600000*num));break; 249.case'm':returnnewDate(Date.parse(this)+(60000*num));break; 250.case'S': 251.case's':returnnewDate(Date.parse(this)+(1000*num));break; 252.default:returnthis; 253.} 254.returnthis; 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.vardtStart=this; 274.if((dtEndinstanceofDate)==false){ 275.return0; 276.}else{ 277.if(!field){ 278.field="d"; 279.} 280.switch(field){ 281.case'Y': 282.case'y':returndtEnd.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':returnparseInt((dtEnd-dtStart)/(86400000*7));break; 286.case'D': 287.case'd':returnparseInt((dtEnd-dtStart)/86400000);break; 288.case'H': 289.case'h':returnparseInt((dtEnd-dtStart)/3600000);break; 290.case'm':returnparseInt((dtEnd-dtStart)/60000);break; 291.case'S': 292.case's':returnparseInt((dtEnd-dtStart)/1000);break; 293.default:return0; 294.} 295.return0; 296.} 297.} 298. 299. 300./** 301.*把日期分割成数组:按数组序号分别为:年月日时分秒 302.*/ 303.Date.prototype.toArray=function() 304.{ 305.varmyArray=newArray(); 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.returnmyArray; 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.varWeek=['日','一','二','三','四','五','六']; 333.switch(field){ 334.case'Y': 335.case'y':returnthis.getFullYear();break; 336.case'M':return(this.getMonth()+1);break; 337.case'W': 338.case'w':returnWeek[this.getDay()];break; 339.case'D': 340.case'd':returnthis.getDate();break; 341.case'H': 342.case'h':returnthis.getHours();break; 343.case'm':returnthis.getMinutes();break; 344.case's':returnthis.getSeconds();break; 345.default:returnthis.getDate(); 346.} 347.returnthis.getDate(); 348.}
以上这篇javascript中对Date类型的常用操作小结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。