JS日期时间函数

时间:2022-03-10 07:52:45
 http://www.cnblogs.com/zhengzhichen/archive/2008/08/25/1276086.html

日期时间脚本库方法列表

Date.prototype.isLeapYear 判断闰年
Date.prototype.Format 日期格式化
Date.prototype.DateAdd 日期计算
Date.prototype.DateDiff 比较日期差
Date.prototype.toString 日期转字符串
Date.prototype.toArray 日期分割为数组
Date.prototype.DatePart 取日期的部分信息
Date.prototype.MaxDayOfDate 取日期所在月的最大天数
Date.prototype.WeekNumOfYear 判断日期所在年的第几周
StringToDate 字符串转日期型
IsValidDate 验证日期有效性
CheckDateTime 完整日期时间检查
daysBetween 日期天数差

  1. //---------------------------------------------------   
  2.   2 // 判断闰年   
  3.   3 //---------------------------------------------------   
  4.   4 Date.prototype.isLeapYear = function()    
  5.   5 {    
  6.   6     return (0==this.getYear()%4&&((this.getYear()%100!=0)||(this.getYear()%400==0)));    
  7.   7 }    
  8.   8    
  9.   9 //---------------------------------------------------   
  10.  10 // 日期格式化   
  11.  11 // 格式 YYYY/yyyy/YY/yy 表示年份   
  12.  12 // MM/M 月份   
  13.  13 // W/w 星期   
  14.  14 // dd/DD/d/D 日期   
  15.  15 // hh/HH/h/H 时间   
  16.  16 // mm/m 分钟   
  17.  17 // ss/SS/s/S 秒   
  18.  18 //---------------------------------------------------   
  19.  19 Date.prototype.Format = function(formatStr)    
  20.  20 {    
  21.  21     var str = formatStr;    
  22.  22     var Week = ['日','一','二','三','四','五','六'];   
  23.  23    
  24.  24     str=str.replace(/yyyy|YYYY/,this.getFullYear());    
  25.  25     str=str.replace(/yy|YY/,(this.getYear() % 100)>9?(this.getYear() % 100).toString():'0' + (this.getYear() % 100));    
  26.  26    
  27.  27     str=str.replace(/MM/,this.getMonth()>9?this.getMonth().toString():'0' + this.getMonth());    
  28.  28     str=str.replace(/M/g,this.getMonth());    
  29.  29    
  30.  30     str=str.replace(/w|W/g,Week[this.getDay()]);    
  31.  31    
  32.  32     str=str.replace(/dd|DD/,this.getDate()>9?this.getDate().toString():'0' + this.getDate());    
  33.  33     str=str.replace(/d|D/g,this.getDate());    
  34.  34    
  35.  35     str=str.replace(/hh|HH/,this.getHours()>9?this.getHours().toString():'0' + this.getHours());    
  36.  36     str=str.replace(/h|H/g,this.getHours());    
  37.  37     str=str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():'0' + this.getMinutes());    
  38.  38     str=str.replace(/m/g,this.getMinutes());    
  39.  39    
  40.  40     str=str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():'0' + this.getSeconds());    
  41.  41     str=str.replace(/s|S/g,this.getSeconds());    
  42.  42    
  43.  43     return str;    
  44.  44 }    
  45.  45    
  46.  46 //+---------------------------------------------------   
  47.  47 //| 求两个时间的天数差 日期格式为 YYYY-MM-dd    
  48.  48 //+---------------------------------------------------   
  49.  49 function daysBetween(DateOne,DateTwo)   
  50.  50 {    
  51.  51     var OneMonth = DateOne.substring(5,DateOne.lastIndexOf ('-'));   
  52.  52     var OneDay = DateOne.substring(DateOne.length,DateOne.lastIndexOf ('-')+1);   
  53.  53     var OneYear = DateOne.substring(0,DateOne.indexOf ('-'));   
  54.  54    
  55.  55     var TwoMonth = DateTwo.substring(5,DateTwo.lastIndexOf ('-'));   
  56.  56     var TwoDay = DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ('-')+1);   
  57.  57     var TwoYear = DateTwo.substring(0,DateTwo.indexOf ('-'));   
  58.  58    
  59.  59     var cha=((Date.parse(OneMonth+'/'+OneDay+'/'+OneYear)- Date.parse(TwoMonth+'/'+TwoDay+'/'+TwoYear))/86400000);    
  60.  60     return Math.abs(cha);   
  61.  61 }   
  62.  62    
  63.  63    
  64.  64 //+---------------------------------------------------   
  65.  65 //| 日期计算   
  66.  66 //+---------------------------------------------------   
  67.  67 Date.prototype.DateAdd = function(strInterval, Number) {    
  68.  68     var dtTmp = this;   
  69.  69     switch (strInterval) {    
  70.  70         case 's' :return new Date(Date.parse(dtTmp) + (1000 * Number));   
  71.  71         case 'n' :return new Date(Date.parse(dtTmp) + (60000 * Number));   
  72.  72         case 'h' :return new Date(Date.parse(dtTmp) + (3600000 * Number));   
  73.  73         case 'd' :return new Date(Date.parse(dtTmp) + (86400000 * Number));   
  74.  74         case 'w' :return new Date(Date.parse(dtTmp) + ((86400000 * 7) * Number));   
  75.  75         case 'q' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number*3, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());   
  76.  76         case 'm' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());   
  77.  77         case 'y' :return new Date((dtTmp.getFullYear() + Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());   
  78.  78     }   
  79.  79 }   
  80.  80    
  81.  81 //+---------------------------------------------------   
  82.  82 //| 比较日期差 dtEnd 格式为日期型或者 有效日期格式字符串   
  83.  83 //+---------------------------------------------------   
  84.  84 Date.prototype.DateDiff = function(strInterval, dtEnd) {    
  85.  85     var dtStart = this;   
  86.  86     if (typeof dtEnd == 'string' )//如果是字符串转换为日期型   
  87.  87     {    
  88.  88         dtEnd = StringToDate(dtEnd);   
  89.  89     }   
  90.  90     switch (strInterval) {    
  91.  91         case 's' :return parseInt((dtEnd - dtStart) / 1000);   
  92.  92         case 'n' :return parseInt((dtEnd - dtStart) / 60000);   
  93.  93         case 'h' :return parseInt((dtEnd - dtStart) / 3600000);   
  94.  94         case 'd' :return parseInt((dtEnd - dtStart) / 86400000);   
  95.  95         case 'w' :return parseInt((dtEnd - dtStart) / (86400000 * 7));   
  96.  96         case 'm' :return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1);   
  97.  97         case 'y' :return dtEnd.getFullYear() - dtStart.getFullYear();   
  98.  98     }   
  99.  99 }   
  100. 100    
  101. 101 //+---------------------------------------------------   
  102. 102 //| 日期输出字符串,重载了系统的toString方法   
  103. 103 //+---------------------------------------------------   
  104. 104 Date.prototype.toString = function(showWeek)   
  105. 105 {    
  106. 106     var myDate= this;   
  107. 107     var str = myDate.toLocaleDateString();   
  108. 108     if (showWeek)   
  109. 109     {    
  110. 110         var Week = ['日','一','二','三','四','五','六'];   
  111. 111         str += ' 星期' + Week[myDate.getDay()];   
  112. 112     }   
  113. 113     return str;   
  114. 114 }   
  115. 115    
  116. 116 //+---------------------------------------------------   
  117. 117 //| 日期合法性验证   
  118. 118 //| 格式为:YYYY-MM-DD或YYYY/MM/DD   
  119. 119 //+---------------------------------------------------   
  120. 120 function IsValidDate(DateStr)    
  121. 121 {    
  122. 122     var sDate=DateStr.replace(/(^/s+|/s+$)/g,''); //去两边空格;    
  123. 123     if(sDate==''return true;    
  124. 124     //如果格式满足YYYY-(/)MM-(/)DD或YYYY-(/)M-(/)DD或YYYY-(/)M-(/)D或YYYY-(/)MM-(/)D就替换为''    
  125. 125     //数据库中,合法日期可以是:YYYY-MM/DD(2003-3/21),数据库会自动转换为YYYY-MM-DD格式    
  126. 126     var s = sDate.replace(/[/d]{ 4,4 }[/-/]{ 1 }[/d]{ 1,2 }[/-/]{ 1 }[/d]{ 1,2 }/g,'');    
  127. 127     if (s==''//说明格式满足YYYY-MM-DD或YYYY-M-DD或YYYY-M-D或YYYY-MM-D    
  128. 128     {    
  129. 129         var t=new Date(sDate.replace(//-/g,'/'));    
  130. 130         var ar = sDate.split(/[-/:]/);    
  131. 131         if(ar[0] != t.getYear() || ar[1] != t.getMonth()+1 || ar[2] != t.getDate())    
  132. 132         {    
  133. 133             //alert('错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。');    
  134. 134             return false;    
  135. 135         }    
  136. 136     }    
  137. 137     else    
  138. 138     {    
  139. 139         //alert('错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。');    
  140. 140         return false;    
  141. 141     }    
  142. 142     return true;    
  143. 143 }    
  144. 144    
  145. 145 //+---------------------------------------------------   
  146. 146 //| 日期时间检查   
  147. 147 //| 格式为:YYYY-MM-DD HH:MM:SS   
  148. 148 //+---------------------------------------------------   
  149. 149 function CheckDateTime(str)   
  150. 150 {    
  151. 151     var reg = /^(/d+)-(/d{ 1,2 })-(/d{ 1,2 }) (/d{ 1,2 }):(/d{ 1,2 }):(/d{ 1,2 })$/;    
  152. 152     var r = str.match(reg);    
  153. 153     if(r==null)return false;    
  154. 154     r[2]=r[2]-1;    
  155. 155     var d= new Date(r[1],r[2],r[3],r[4],r[5],r[6]);    
  156. 156     if(d.getFullYear()!=r[1])return false;    
  157. 157     if(d.getMonth()!=r[2])return false;    
  158. 158     if(d.getDate()!=r[3])return false;    
  159. 159     if(d.getHours()!=r[4])return false;    
  160. 160     if(d.getMinutes()!=r[5])return false;    
  161. 161     if(d.getSeconds()!=r[6])return false;    
  162. 162     return true;    
  163. 163 }    
  164. 164    
  165. 165 //+---------------------------------------------------   
  166. 166 //| 把日期分割成数组   
  167. 167 //+---------------------------------------------------   
  168. 168 Date.prototype.toArray = function()   
  169. 169 {    
  170. 170     var myDate = this;   
  171. 171     var myArray = Array();   
  172. 172     myArray[0] = myDate.getFullYear();   
  173. 173     myArray[1] = myDate.getMonth();   
  174. 174     myArray[2] = myDate.getDate();   
  175. 175     myArray[3] = myDate.getHours();   
  176. 176     myArray[4] = myDate.getMinutes();   
  177. 177     myArray[5] = myDate.getSeconds();   
  178. 178     return myArray;   
  179. 179 }   
  180. 180    
  181. 181 //+---------------------------------------------------   
  182. 182 //| 取得日期数据信息   
  183. 183 //| 参数 interval 表示数据类型   
  184. 184 //| y 年 m月 d日 w星期 ww周 h时 n分 s秒   
  185. 185 //+---------------------------------------------------   
  186. 186 Date.prototype.DatePart = function(interval)   
  187. 187 {    
  188. 188     var myDate = this;   
  189. 189     var partStr='';   
  190. 190     var Week = ['日','一','二','三','四','五','六'];   
  191. 191     switch (interval)   
  192. 192     {    
  193. 193         case 'y' :partStr = myDate.getFullYear();break;   
  194. 194         case 'm' :partStr = myDate.getMonth()+1;break;   
  195. 195         case 'd' :partStr = myDate.getDate();break;   
  196. 196         case 'w' :partStr = Week[myDate.getDay()];break;   
  197. 197         case 'ww' :partStr = myDate.WeekNumOfYear();break;   
  198. 198         case 'h' :partStr = myDate.getHours();break;   
  199. 199         case 'n' :partStr = myDate.getMinutes();break;   
  200. 200         case 's' :partStr = myDate.getSeconds();break;   
  201. 201     }   
  202. 202     return partStr;   
  203. 203 }   
  204. 204    
  205. 205 //+---------------------------------------------------   
  206. 206 //| 取得当前日期所在月的最大天数   
  207. 207 //+---------------------------------------------------   
  208. 208 Date.prototype.MaxDayOfDate = function()   
  209. 209 {    
  210. 210     var myDate = this;   
  211. 211     var ary = myDate.toArray();   
  212. 212     var date1 = (new Date(ary[0],ary[1]+1,1));   
  213. 213     var date2 = date1.dateAdd(1,'m',1);   
  214. 214     var result = dateDiff(date1.Format('yyyy-MM-dd'),date2.Format('yyyy-MM-dd'));   
  215. 215     return result;   
  216. 216 }   
  217. 217    
  218. 218 //+---------------------------------------------------   
  219. 219 //| 取得当前日期所在周是一年中的第几周   
  220. 220 //+---------------------------------------------------   
  221. 221 Date.prototype.WeekNumOfYear = function()   
  222. 222 {    
  223. 223     var myDate = this;   
  224. 224     var ary = myDate.toArray();   
  225. 225     var year = ary[0];   
  226. 226     var month = ary[1]+1;   
  227. 227     var day = ary[2];   
  228. 228     document.write('< script language=VBScript/> /n');   
  229. 229     document.write('myDate = DateValue(''+month+'-'+day+'-'+year+'') /n');   
  230. 230     document.write('result = DatePart('ww', myDate) /n');   
  231. 231     document.write(' /n');   
  232. 232     return result;   
  233. 233 }   
  234. 234    
  235. 235 //+---------------------------------------------------   
  236. 236 //| 字符串转成日期类型    
  237. 237 //| 格式 MM/dd/YYYY MM-dd-YYYY YYYY/MM/dd YYYY-MM-dd   
  238. 238 //+---------------------------------------------------   
  239. 239 function StringToDate(DateStr)   
  240. 240 {    
  241. 241    
  242. 242     var converted = Date.parse(DateStr);   
  243. 243     var myDate = new Date(converted);   
  244. 244     if (isNaN(myDate))   
  245. 245     {    
  246. 246         //var delimCahar = DateStr.indexOf('/')!=-1?'/':'-';   
  247. 247         var arys= DateStr.split('-');   
  248. 248         myDate = new Date(arys[0],--arys[1],arys[2]);   
  249. 249     }   
  250. 250     return myDate;   
  251. 251 }   
  252. 252