使用prototype扩展的JavaScript常用函数库

简介:   1 /**    2 * 检索数组元素(原型扩展或重载)    3 * @param {o} 被检索的元素值    4 * @type int    5 * @returns 元素索引    6 */     7 Array.
  1  /* *  
  2  * 检索数组元素(原型扩展或重载)  
  3  * @param {o} 被检索的元素值  
  4  * @type int  
  5  * @returns 元素索引  
  6  */    
  7  Array.prototype.contains  =   function (o) {   
  8     var  index  =   - 1 ;   
  9     for ( var  i = 0 ;i < this .length;i ++ ){ if ( this [i] == o){index  =  i; break ;}}   
 10     return  index;   
 11  }   
 12    
 13  /* *  
 14  * 日期格式化(原型扩展或重载)  
 15  * 格式 YYYY/yyyy/YY/yy 表示年份  
 16  * MM/M 月份  
 17  * W/w 星期  
 18  * dd/DD/d/D 日期  
 19  * hh/HH/h/H 时间  
 20  * mm/m 分钟  
 21  * ss/SS/s/S 秒  
 22  * @param {formatStr} 格式模版  
 23  * @type string  
 24  * @returns 日期字符串  
 25  */    
 26  Date.prototype.format  =   function (formatStr){   
 27       var  str  =  formatStr;   
 28       var  Week  =  [ ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' ];   
 29      str = str.replace( / yyyy|YYYY / , this .getFullYear());   
 30      str = str.replace( / yy|YY / ,( this .getYear()  %   100 ) > 9 ? ( this .getYear()  %   100 ).toString(): ' 0 '   +  ( this .getYear()  %   100 ));   
 31      str = str.replace( / MM / ,( this .getMonth() + 1 ) > 9 ? ( this .getMonth() + 1 ).toString(): ' 0 '   +  ( this .getMonth() + 1 ));   
 32      str = str.replace( / M / g, this .getMonth());   
 33      str = str.replace( / w|W / g,Week[ this .getDay()]);   
 34      str = str.replace( / dd|DD / , this .getDate() > 9 ? this .getDate().toString(): ' 0 '   +   this .getDate());   
 35      str = str.replace( / d|D / g, this .getDate());   
 36      str = str.replace( / hh|HH / , this .getHours() > 9 ? this .getHours().toString(): ' 0 '   +   this .getHours());   
 37      str = str.replace( / h|H / g, this .getHours());   
 38      str = str.replace( / mm / , this .getMinutes() > 9 ? this .getMinutes().toString(): ' 0 '   +   this .getMinutes());   
 39      str = str.replace( / m / g, this .getMinutes());   
 40      str = str.replace( / ss|SS / , this .getSeconds() > 9 ? this .getSeconds().toString(): ' 0 '   +   this .getSeconds());   
 41      str = str.replace( / s|S / g, this .getSeconds());   
 42       return  str;   
 43  }   
 44    
 45  /* *  
 46  * 比较日期差(原型扩展或重载)  
 47  * @param {strInterval} 日期类型:'y、m、d、h、n、s、w'  
 48  * @param {dtEnd} 格式为日期型或者 有效日期格式字符串  
 49  * @type int  
 50  * @returns 比较结果  
 51  */    
 52  Date.prototype.dateDiff  =   function (strInterval, dtEnd) {   
 53       var  dtStart  =   this ;   
 54       if  ( typeof  dtEnd  ==   ' string '  ) {  // 如果是字符串转换为日期型   
 55          dtEnd  =  StringToDate(dtEnd);   
 56      }   
 57       switch  (strInterval) {   
 58           case   ' s '  : return  parseInt((dtEnd  -  dtStart)  /   1000 );   
 59           case   ' n '  : return  parseInt((dtEnd  -  dtStart)  /   60000 );   
 60           case   ' h '  : return  parseInt((dtEnd  -  dtStart)  /   3600000 );   
 61           case   ' d '  : return  parseInt((dtEnd  -  dtStart)  /   86400000 );   
 62           case   ' w '  : return  parseInt((dtEnd  -  dtStart)  /  ( 86400000   *   7 ));   
 63           case   ' m '  : return  (dtEnd.getMonth() + 1 ) + ((dtEnd.getFullYear() - dtStart.getFullYear()) * 12 -  (dtStart.getMonth() + 1 );   
 64           case   ' y '  : return  dtEnd.getFullYear()  -  dtStart.getFullYear();   
 65      }   
 66  }   
 67    
 68  /* *  
 69  * 日期计算(原型扩展或重载)  
 70  * @param {strInterval} 日期类型:'y、m、d、h、n、s、w'  
 71  * @param {Number} 数量  
 72  * @type Date  
 73  * @returns 计算后的日期  
 74  */    
 75  Date.prototype.dateAdd  =   function (strInterval, Number) {   
 76       var  dtTmp  =   this ;   
 77       switch  (strInterval) {   
 78           case   ' s '  : return   new  Date(Date.parse(dtTmp)  +  ( 1000   *  Number));   
 79           case   ' n '  : return   new  Date(Date.parse(dtTmp)  +  ( 60000   *  Number));   
 80           case   ' h '  : return   new  Date(Date.parse(dtTmp)  +  ( 3600000   *  Number));   
 81           case   ' d '  : return   new  Date(Date.parse(dtTmp)  +  ( 86400000   *  Number));   
 82           case   ' w '  : return   new  Date(Date.parse(dtTmp)  +  (( 86400000   *   7 *  Number));   
 83           case   ' q '  : return   new  Date(dtTmp.getFullYear(), (dtTmp.getMonth())  +  Number * 3 , dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());   
 84           case   ' m '  : return   new  Date(dtTmp.getFullYear(), (dtTmp.getMonth())  +  Number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());   
 85           case   ' y '  : return   new  Date((dtTmp.getFullYear()  +  Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());   
 86      }   
 87  }   
 88    
 89  /* *  
 90  * 取得日期数据信息(原型扩展或重载)  
 91  * @param {interval} 日期类型:'y、m、d、h、n、s、w'  
 92  * @type int  
 93  * @returns 指定的日期部分  
 94  */    
 95  Date.prototype.datePart  =   function (interval){   
 96       var  myDate  =   this ;   
 97       var  partStr = '' ;   
 98       var  Week  =  [ ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' ];   
 99       switch  (interval)   
100      {   
101           case   ' y '  :partStr  =  myDate.getFullYear(); break ;   
102           case   ' m '  :partStr  =  myDate.getMonth() + 1 ; break ;   
103           case   ' d '  :partStr  =  myDate.getDate(); break ;   
104           case   ' w '  :partStr  =  Week[myDate.getDay()]; break ;   
105           case   ' ww '  :partStr  =  myDate.WeekNumOfYear(); break ;   
106           case   ' h '  :partStr  =  myDate.getHours(); break ;   
107           case   ' n '  :partStr  =  myDate.getMinutes(); break ;   
108           case   ' s '  :partStr  =  myDate.getSeconds(); break ;   
109      }   
110       return  partStr;   
111  }   
112    
113  /* *  
114  * 把日期分割成数组(原型扩展或重载)  
115  * @type array  
116  * @returns 日期数组  
117  */    
118  Date.prototype.toArray  =   function () {   
119       var  myDate  =   this ;   
120       var  myArray  =  Array();   
121      myArray[ 0 =  myDate.getFullYear();   
122      myArray[ 1 =  myDate.getMonth() + 1 ;   
123      myArray[ 2 =  myDate.getDate();   
124      myArray[ 3 =  myDate.getHours();   
125      myArray[ 4 =  myDate.getMinutes();   
126      myArray[ 5 =  myDate.getSeconds();   
127       return  myArray;   
128  }   
129    
130  /* *  
131  * 取得当前月份的天数(原型扩展或重载)  
132  * @type int  
133  * @returns 天数  
134  */    
135  Date.prototype.daysOfMonth  =   function (){   
136       var  myDate  =   this ;   
137       var  ary  =  myDate.toArray();   
138       var  date1  =  ( new  Date(ary[ 0 ],ary[ 1 ] + 1 , 1 ));   
139       var  date2  =  date1.dateAdd( ' m ' , 1 );   
140       var  result  =  daysDiff(date1.format( ' yyyy-MM-dd ' ),date2.format( ' yyyy-MM-dd ' ));   
141       return  result;   
142  }   
143    
144  /* *  
145  * 判断闰年(原型扩展或重载)  
146  * @type boolean  
147  * @returns 是否为闰年 true/false  
148  */    
149  Date.prototype.isLeapYear  =   function () {   
150     return  ( 0 == this .getYear() % 4 && (( this .getYear() % 100 != 0 ) || ( this .getYear() % 400 == 0 )));   
151  }   
152    
153  /* *  
154  * 比较两个日期的天数差(自定义)  
155  * @param {DateOne} 日期一  
156  * @param {DateOne} 日期二  
157  * @type int  
158  * @returns 比较结果  
159  */    
160  function  daysDiff(DateOne,DateTwo)   
161  {   
162       var  OneMonth  =  DateOne.substring( 5 ,DateOne.lastIndexOf ( ' - ' ));   
163       var  OneDay  =  DateOne.substring(DateOne.length,DateOne.lastIndexOf ( ' - ' ) + 1 );   
164       var  OneYear  =  DateOne.substring( 0 ,DateOne.indexOf ( ' - ' ));   
165    
166       var  TwoMonth  =  DateTwo.substring( 5 ,DateTwo.lastIndexOf ( ' - ' ));   
167       var  TwoDay  =  DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ( ' - ' ) + 1 );   
168       var  TwoYear  =  DateTwo.substring( 0 ,DateTwo.indexOf ( ' - ' ));   
169    
170       var  cha = ((Date.parse(OneMonth + ' / ' + OneDay + ' / ' + OneYear) -  Date.parse(TwoMonth + ' / ' + TwoDay + ' / ' + TwoYear)) / 86400000);   
171       return  Math.abs(cha);   
172  }   
173    
174  /* *  
175  * 日期计算(自定义)  
176  * @param {strInterval} 日期类型:'y、m、d、h、n、s、w'  
177  * @param {Number} 数量  
178  * @param {prmDate} 原日期  
179  * @type Date  
180  * @returns 计算后的日期  
181  */    
182  function  dateAdd(interval,number,prmDate){   
183    number  =  parseInt(number);   
184     if  ( typeof (prmDate) == " string " ){   
185      prmDate  =  prmDate.split( / \D / );   
186       -- prmDate[ 1 ];   
187      eval( " var prmDate = new Date( " + prmDate.join( " , " ) + " ) " );   
188    }   
189     if  ( typeof (prmDate) == " object " ){   
190       var  prmDate  =  prmDate   
191    }   
192     switch (interval){   
193       case   " y " : prmDate.setFullYear(prmDate.getFullYear() + number);  break ;   
194       case   " m " : prmDate.setMonth(prmDate.getMonth() + number);  break ;   
195       case   " d " : prmDate.setDate(prmDate.getDate() + number);  break ;   
196       case   " w " : prmDate.setDate(prmDate.getDate() + 7 * number);  break ;   
197       case   " h " : prmDate.setHours(prmDate.getHour() + number);  break ;   
198       case   " n " : prmDate.setMinutes(prmDate.getMinutes() + number);  break ;   
199       case   " s " : prmDate.setSeconds(prmDate.getSeconds() + number);  break ;   
200       case   " l " : prmDate.setMilliseconds(prmDate.getMilliseconds() + number);  break ;   
201    }   
202     return  prmDate;   
203  }   
204    
205  /* *  
206  * 获取字符串长度(原型扩展或重载)  
207  * @type int  
208  * @returns 字符串长度  
209  */    
210  String.prototype.len  =   function () {   
211     var  arr = this .match( / [^\x00-\xff] / ig);   
212     return   this .length + (arr == null ? 0 :arr.length);   
213  }   
214    
215  /* *  
216  * 字符串左取指定个数的字符(原型扩展或重载)  
217  * @param {num} 获取个数  
218  * @type string  
219  * @returns 匹配的字符串  
220  */    
221  String.prototype.left  =   function (num,mode) {   
222     if ( ! / \d+ / .test(num))  return ( this );   
223     var  str  =   this .substr( 0 ,num);   
224     if ( ! mode)  return  str;   
225     var  n  =  str.len()  -  str.length;   
226    num  =  num  -  parseInt(n / 2);   
227     return   this .substr( 0 ,num);   
228  }   
229    
230  /* *  
231  * 字符串右取指定个数的字符(原型扩展或重载)  
232  * @param {num} 获取个数  
233  * @type string  
234  * @returns 匹配的字符串  
235  */    
236  String.prototype.right  =   function (num,mode) {   
237     if ( ! / \d+ / .test(num))  return ( this );   
238     var  str  =   this .substr( this .length - num);   
239     if ( ! mode)  return  str;   
240     var  n  =  str.len()  -  str.length;   
241    num  =  num  -  parseInt(n / 2);   
242     return   this .substr( this .length - num);   
243  }   
244    
245  /* *  
246  * 字符串包含(原型扩展或重载)  
247  * @param {string: str} 要搜索的子字符串  
248  * @param {bool: mode} 是否忽略大小写  
249  * @type int  
250  * @returns 匹配的个数  
251  */    
252  String.prototype.matchCount  =   function (str,mode) {   
253     return  eval( " this.match(/( " + str + " )/g " + (mode ? " i " : "" ) + " ).length " );   
254  }   
255    
256  /* *  
257  * 去除左右空格(原型扩展或重载)  
258  * @type string  
259  * @returns 处理后的字符串  
260  */    
261  String.prototype.trim  =   function () {   
262     return   this .replace( / (^\s*)|(\s*$) / g, "" );   
263  }   
264    
265  /* *  
266  * 去除左空格(原型扩展或重载)  
267  * @type string  
268  * @returns 处理后的字符串  
269  */    
270  String.prototype.lTrim  =   function () {   
271     return   this .replace( / (^\s*) / g,  "" );   
272  }   
273    
274  /* *  
275  * 去除右空格(原型扩展或重载)  
276  * @type string  
277  * @returns 处理后的字符串  
278  */    
279  String.prototype.rTrim  =   function () {   
280     return   this .replace( / (\s*$) / g,  "" );   
281  }   
282    
283  /* *  
284  * 字符串转换为日期型(原型扩展或重载)  
285  * @type Date  
286  * @returns 日期  
287  */    
288  String.prototype.toDate  =   function () {    
289     var  converted  =  Date.parse( this );     
290     var  myDate  =   new  Date(converted);    
291     if  (isNaN(myDate)) { var  arys =   this .split( ' - ' ); myDate  =   new  Date(arys[ 0 ], -- arys[ 1 ],arys[ 2 ]); }    
292     return  myDate;   
293  }  

 


宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒
目录
打赏
0
0
0
0
8
分享
相关文章
一些处理浏览器兼容性问题的JavaScript库
这些库在处理浏览器兼容性问题方面都有着各自的特点和优势,可以根据具体的需求和项目情况选择合适的库来使用,从而提高代码的兼容性和稳定性,为用户提供更好的体验。同时,随着浏览器技术的不断发展,还需要持续关注和学习新的兼容性解决方案。
115 48
Node.js作为一种快速、可扩展的服务器端运行时环境
Node.js作为一种快速、可扩展的服务器端运行时环境
50 8
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
本文介绍了JavaScript中常用的函数和方法,包括通用函数、Global对象函数以及数组相关函数。详细列出了每个函数的参数、返回值及使用说明,并提供了示例代码。文章强调了函数的学习应结合源码和实践,适合JavaScript初学者和进阶开发者参考。
48 2
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
Nginx 支持 JavaScript:前所未有的扩展
Nginx 是全球领先的高性能 Web 服务器,以其高效的反向代理和负载均衡功能著称。近期,Nginx 正式支持 JavaScript(通过 NJS 模块),基于 V8 引擎,允许在配置中嵌入 JS 代码,极大提升了灵活性和扩展性。开发者可以使用 JavaScript 实现动态请求处理、自定义认证、复杂响应处理、中间件编写及流量控制等功能,显著降低开发和维护难度,同时保持高性能。NJS 模块的引入为 Nginx 带来了前所未有的扩展能力,适应快速变化的业务需求。
32 0
|
2月前
|
CDN
如何在项目中使用Moment.js库?
如何在项目中使用Moment.js库?
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
49 2
如何在不影响性能的前提下使用JavaScript库来实现复杂的动画效果?
如何在不影响性能的前提下使用JavaScript库来实现复杂的动画效果?
|
2月前
|
Moment.js库是如何处理不同浏览器的时间戳格式差异的?
总的来说,Moment.js 通过一系列的技术手段和策略,有效地处理了不同浏览器的时间戳格式差异,为开发者提供了一个稳定、可靠且易于使用的时间处理工具。
53 1
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等