基于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 相关文章推荐
11款新鲜的jQuery插件[附所有demo下载]
Jan 24 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
Mar 14 Javascript
JS实现简单的键盘打字的效果
Apr 24 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
Sep 19 Javascript
百度搜索框智能提示案例jsonp
Nov 28 Javascript
js学使用setTimeout实现轮循动画
Jul 17 Javascript
node.js 用socket实现聊天的示例代码
Oct 17 Javascript
Nuxt.js实战详解
Jan 18 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
Apr 09 Javascript
解析vue data不可以使用箭头函数问题
Jul 03 Javascript
Vue-component全局注册实例
Sep 06 Javascript
node.js实现为PDF添加水印的示例代码
Dec 05 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
PHP实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
php获取当前时间的毫秒数的方法
2014/01/26 PHP
PHP JSON格式的中文显示问题解决方法
2015/04/09 PHP
PHP PDOStatement::bindParam讲解
2019/01/30 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
jquery multiSelect 多选下拉框
2010/07/09 Javascript
浅析JQuery中的html(),text(),val()区别
2014/09/01 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
简单的分页代码js实现
2016/05/17 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
JS实现点餐自动选择框(案例分析)
2019/12/10 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
[49:43]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python文档生成工具pydoc使用介绍
2015/06/02 Python
python 重定向获取真实url的方法
2018/05/11 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
2019/07/18 Python
对于Python深浅拷贝的理解
2019/07/29 Python
python入门之基础语法学习笔记
2020/02/08 Python
Python中的整除和取模实例
2020/06/03 Python
python飞机大战游戏实例讲解
2020/12/04 Python
手把手教你用纯css3实现轮播图效果实例
2017/05/04 HTML / CSS
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
.NET程序员的数据库面试题
2012/10/10 面试题
住宅使用说明书
2014/05/09 职场文书
国庆65周年演讲稿:回首往昔,展望未来
2014/09/21 职场文书
材料采购员岗位职责
2015/04/03 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书