基于prototype扩展的JavaScript常用函数库


Posted in Javascript onNovember 30, 2010
/** 
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;}} 
return index; 
} /** 
* 日期格式化(原型扩展或重载) 
* 格式 YYYY/yyyy/YY/yy 表示年份 
* MM/M 月份 
* W/w 星期 
* dd/DD/d/D 日期 
* hh/HH/h/H 时间 
* mm/m 分钟 
* ss/SS/s/S 秒 
* @param {formatStr} 格式模版 
* @type string 
* @returns 日期字符串 
*/ 
Date.prototype.format = function(formatStr){ 
var str = formatStr; 
var Week = ['日','一','二','三','四','五','六']; 
str=str.replace(/yyyy|YYYY/,this.getFullYear()); 
str=str.replace(/yy|YY/,(this.getYear() % 100)>9?(this.getYear() % 100).toString():'0' + (this.getYear() % 100)); 
str=str.replace(/MM/,(this.getMonth()+1)>9?(this.getMonth()+1).toString():'0' + (this.getMonth()+1)); 
str=str.replace(/M/g,this.getMonth()); 
str=str.replace(/w|W/g,Week[this.getDay()]); 
str=str.replace(/dd|DD/,this.getDate()>9?this.getDate().toString():'0' + this.getDate()); 
str=str.replace(/d|D/g,this.getDate()); 
str=str.replace(/hh|HH/,this.getHours()>9?this.getHours().toString():'0' + this.getHours()); 
str=str.replace(/h|H/g,this.getHours()); 
str=str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():'0' + this.getMinutes()); 
str=str.replace(/m/g,this.getMinutes()); 
str=str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():'0' + this.getSeconds()); 
str=str.replace(/s|S/g,this.getSeconds()); 
return str; 
} 
/** 
* 比较日期差(原型扩展或重载) 
* @param {strInterval} 日期类型:'y、m、d、h、n、s、w' 
* @param {dtEnd} 格式为日期型或者 有效日期格式字符串 
* @type int 
* @returns 比较结果 
*/ 
Date.prototype.dateDiff = function(strInterval, dtEnd) { 
var dtStart = this; 
if (typeof dtEnd == 'string' ) { //如果是字符串转换为日期型 
dtEnd = StringToDate(dtEnd); 
} 
switch (strInterval) { 
case 's' :return parseInt((dtEnd - dtStart) / 1000); 
case 'n' :return parseInt((dtEnd - dtStart) / 60000); 
case 'h' :return parseInt((dtEnd - dtStart) / 3600000); 
case 'd' :return parseInt((dtEnd - dtStart) / 86400000); 
case 'w' :return parseInt((dtEnd - dtStart) / (86400000 * 7)); 
case 'm' :return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1); 
case 'y' :return dtEnd.getFullYear() - dtStart.getFullYear(); 
} 
} 
/** 
* 日期计算(原型扩展或重载) 
* @param {strInterval} 日期类型:'y、m、d、h、n、s、w' 
* @param {Number} 数量 
* @type Date 
* @returns 计算后的日期 
*/ 
Date.prototype.dateAdd = function(strInterval, Number) { 
var dtTmp = this; 
switch (strInterval) { 
case 's' :return new Date(Date.parse(dtTmp) + (1000 * Number)); 
case 'n' :return new Date(Date.parse(dtTmp) + (60000 * Number)); 
case 'h' :return new Date(Date.parse(dtTmp) + (3600000 * Number)); 
case 'd' :return new Date(Date.parse(dtTmp) + (86400000 * Number)); 
case 'w' :return new Date(Date.parse(dtTmp) + ((86400000 * 7) * Number)); 
case 'q' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number*3, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds()); 
case 'm' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds()); 
case 'y' :return new Date((dtTmp.getFullYear() + Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds()); 
} 
} 
/** 
* 取得日期数据信息(原型扩展或重载) 
* @param {interval} 日期类型:'y、m、d、h、n、s、w' 
* @type int 
* @returns 指定的日期部分 
*/ 
Date.prototype.datePart = function(interval){ 
var myDate = this; 
var partStr=''; 
var Week = ['日','一','二','三','四','五','六']; 
switch (interval) 
{ 
case 'y' :partStr = myDate.getFullYear();break; 
case 'm' :partStr = myDate.getMonth()+1;break; 
case 'd' :partStr = myDate.getDate();break; 
case 'w' :partStr = Week[myDate.getDay()];break; 
case 'ww' :partStr = myDate.WeekNumOfYear();break; 
case 'h' :partStr = myDate.getHours();break; 
case 'n' :partStr = myDate.getMinutes();break; 
case 's' :partStr = myDate.getSeconds();break; 
} 
return partStr; 
} 
/** 
* 把日期分割成数组(原型扩展或重载) 
* @type array 
* @returns 日期数组 
*/ 
Date.prototype.toArray = function() { 
var myDate = this; 
var myArray = Array(); 
myArray[0] = myDate.getFullYear(); 
myArray[1] = myDate.getMonth()+1; 
myArray[2] = myDate.getDate(); 
myArray[3] = myDate.getHours(); 
myArray[4] = myDate.getMinutes(); 
myArray[5] = myDate.getSeconds(); 
return myArray; 
} 
/** 
* 取得当前月份的天数(原型扩展或重载) 
* @type int 
* @returns 天数 
*/ 
Date.prototype.daysOfMonth = function(){ 
var myDate = this; 
var ary = myDate.toArray(); 
var date1 = (new Date(ary[0],ary[1]+1,1)); 
var date2 = date1.dateAdd('m',1); 
var result = daysDiff(date1.format('yyyy-MM-dd'),date2.format('yyyy-MM-dd')); 
return result; 
} 
/** 
* 判断闰年(原型扩展或重载) 
* @type boolean 
* @returns 是否为闰年 true/false 
*/ 
Date.prototype.isLeapYear = function() { 
return (0==this.getYear()%4&&((this.getYear()%100!=0)||(this.getYear()%400==0))); 
} 
/** 
* 比较两个日期的天数差(自定义) 
* @param {DateOne} 日期一 
* @param {DateOne} 日期二 
* @type int 
* @returns 比较结果 
*/ 
function daysDiff(DateOne,DateTwo) 
{ 
var OneMonth = DateOne.substring(5,DateOne.lastIndexOf ('-')); 
var OneDay = DateOne.substring(DateOne.length,DateOne.lastIndexOf ('-')+1); 
var OneYear = DateOne.substring(0,DateOne.indexOf ('-')); 
var TwoMonth = DateTwo.substring(5,DateTwo.lastIndexOf ('-')); 
var TwoDay = DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ('-')+1); 
var TwoYear = DateTwo.substring(0,DateTwo.indexOf ('-')); 
var cha=((Date.parse(OneMonth+'/'+OneDay+'/'+OneYear)- Date.parse(TwoMonth+'/'+TwoDay+'/'+TwoYear))/86400000); 
return Math.abs(cha); 
} 
/** 
* 日期计算(自定义) 
* @param {strInterval} 日期类型:'y、m、d、h、n、s、w' 
* @param {Number} 数量 
* @param {prmDate} 原日期 
* @type Date 
* @returns 计算后的日期 
*/ 
function dateAdd(interval,number,prmDate){ 
number = parseInt(number); 
if (typeof(prmDate)=="string"){ 
prmDate = prmDate.split(/\D/); 
--prmDate[1]; 
eval("var prmDate = new Date("+prmDate.join(",")+")"); 
} 
if (typeof(prmDate)=="object"){ 
var prmDate = prmDate 
} 
switch(interval){ 
case "y": prmDate.setFullYear(prmDate.getFullYear()+number); break; 
case "m": prmDate.setMonth(prmDate.getMonth()+number); break; 
case "d": prmDate.setDate(prmDate.getDate()+number); break; 
case "w": prmDate.setDate(prmDate.getDate()+7*number); break; 
case "h": prmDate.setHours(prmDate.getHour()+number); break; 
case "n": prmDate.setMinutes(prmDate.getMinutes()+number); break; 
case "s": prmDate.setSeconds(prmDate.getSeconds()+number); break; 
case "l": prmDate.setMilliseconds(prmDate.getMilliseconds()+number); break; 
} 
return prmDate; 
} 
/** 
* 获取字符串长度(原型扩展或重载) 
* @type int 
* @returns 字符串长度 
*/ 
String.prototype.len = function() { 
var arr=this.match(/[^\x00-\xff]/ig); 
return this.length+(arr==null?0:arr.length); 
} 
/** 
* 字符串左取指定个数的字符(原型扩展或重载) 
* @param {num} 获取个数 
* @type string 
* @returns 匹配的字符串 
*/ 
String.prototype.left = function(num,mode) { 
if(!/\d+/.test(num)) return(this); 
var str = this.substr(0,num); 
if(!mode) return str; 
var n = str.len() - str.length; 
num = num - parseInt(n/2); 
return this.substr(0,num); 
} 
/** 
* 字符串右取指定个数的字符(原型扩展或重载) 
* @param {num} 获取个数 
* @type string 
* @returns 匹配的字符串 
*/ 
String.prototype.right = function(num,mode) { 
if(!/\d+/.test(num)) return(this); 
var str = this.substr(this.length-num); 
if(!mode) return str; 
var n = str.len() - str.length; 
num = num - parseInt(n/2); 
return this.substr(this.length-num); 
} 
/** 
* 字符串包含(原型扩展或重载) 
* @param {string: str} 要搜索的子字符串 
* @param {bool: mode} 是否忽略大小写 
* @type int 
* @returns 匹配的个数 
*/ 
String.prototype.matchCount = function(str,mode) { 
return eval("this.match(/("+str+")/g"+(mode?"i":"")+").length"); 
} 
/** 
* 去除左右空格(原型扩展或重载) 
* @type string 
* @returns 处理后的字符串 
*/ 
String.prototype.trim = function() { 
return this.replace(/(^\s*)|(\s*$)/g,""); 
} 
/** 
* 去除左空格(原型扩展或重载) 
* @type string 
* @returns 处理后的字符串 
*/ 
String.prototype.lTrim = function() { 
return this.replace(/(^\s*)/g, ""); 
} 
/** 
* 去除右空格(原型扩展或重载) 
* @type string 
* @returns 处理后的字符串 
*/ 
String.prototype.rTrim = function() { 
return this.replace(/(\s*$)/g, ""); 
} 
/** 
* 字符串转换为日期型(原型扩展或重载) 
* @type Date 
* @returns 日期 
*/ 
String.prototype.toDate = function() { 
var converted = Date.parse(this); 
var myDate = new Date(converted); 
if (isNaN(myDate)) {var arys= this.split('-'); myDate = new Date(arys[0],--arys[1],arys[2]); } 
return myDate; 
}
Javascript 相关文章推荐
InnerHtml和InnerText的区别分析
Mar 13 Javascript
JavaScript实现获得所有兄弟节点的方法
Jul 23 Javascript
jquery判断输入密码两次是否相等
Apr 22 Javascript
谈谈第三方App接入微信登录 解读
Dec 27 Javascript
jQuery模拟窗口抖动效果
Mar 15 Javascript
PHP7新特性简述
Jun 11 Javascript
Vue 实现树形视图数据功能
May 07 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
Nov 21 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
May 18 Javascript
vue vant Area组件使用详解
Dec 09 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
Feb 11 Javascript
浅析我对JS延迟异步脚本的思考
Oct 12 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
Nov 30 #Javascript
学习面向对象之面向对象的术语
Nov 30 #Javascript
学习面向对象之面向对象的基本概念:对象和其他基本要素
Nov 30 #Javascript
基于JQuery的asp.net树实现代码
Nov 30 #Javascript
JQUERY设置IFRAME的SRC值的代码
Nov 30 #Javascript
juqery 学习之四 筛选过滤
Nov 30 #Javascript
juqery 学习之四 筛选查找
Nov 30 #Javascript
You might like
手把手教你使用DedeCms V3的在线采集图文教程
2007/04/03 PHP
详解PHP导入导出CSV文件
2014/11/03 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
php中Snoopy类用法实例
2015/06/19 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
JavaScript 动态生成方法的例子
2009/07/22 Javascript
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
2014/03/28 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
nodejs连接mongodb数据库实现增删改查
2016/12/01 NodeJs
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
2019/02/21 Javascript
NodeJs生成sitemap站点地图的方法示例
2019/06/11 NodeJs
elementui实现预览图片组件二次封装
2020/12/29 Javascript
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
2020/12/30 Vue.js
python中list循环语句用法实例
2014/11/10 Python
介绍Python中的fabs()方法的使用
2015/05/14 Python
Python的Django框架安装全攻略
2015/07/15 Python
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
python 搜索大文件的实例代码
2019/07/08 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
关于多元线性回归分析——Python&amp;SPSS
2020/02/24 Python
Python selenium自动化测试模型图解
2020/04/15 Python
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
Priority Pass机场贵宾室会籍计划:全球超过1200间机场贵宾室
2018/08/26 全球购物
餐饮业会计岗位职责
2013/12/19 职场文书
本科毕业生求职自荐信
2014/02/03 职场文书
商铺消防安全责任书
2014/07/29 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书