基于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 相关文章推荐
JS trim去空格的最佳实践
Oct 30 Javascript
详解JavaScript中数组的相关知识
Jul 29 Javascript
jQuery实现动态添加和删除一个div
Aug 12 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
Aug 18 Javascript
jQuery实现图片轮播效果代码
Sep 27 Javascript
Bootstrap的class样式小结
Dec 01 Javascript
vue filters的使用详解
Jun 11 Javascript
JavaScript高级函数应用之分时函数实例分析
Aug 03 Javascript
Vuejs开发环境搭建及热更新【推荐】
Sep 07 Javascript
vue下使用nginx刷新页面404的问题解决
Aug 02 Javascript
Jquery高级应用Deferred对象原理及使用实例
May 28 jQuery
html+vue.js 实现漂亮分页功能可兼容IE
Nov 07 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
星际争霸秘籍
2020/03/04 星际争霸
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
2012/03/07 PHP
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
jQuery 技巧小结
2010/04/02 Javascript
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
js控制frameSet示例
2013/09/10 Javascript
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
微信小程序 页面传值详解
2017/03/10 Javascript
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
Vue管理系统前端之组件拆分封装详解
2020/08/23 Javascript
vue使用echarts画组织结构图
2021/02/06 Vue.js
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
JavaScript中的模拟事件和自定义事件实例分析
2018/07/27 Python
Python requests库用法实例详解
2018/08/14 Python
Python学习笔记之列表推导式实例分析
2019/08/13 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
Python如何向SQLServer存储二进制图片
2020/06/08 Python
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
德国机车企业:FC-Moto
2017/10/27 全球购物
UNIX文件系统常用命令
2012/05/25 面试题
商务英语专业应届毕业生求职信
2013/10/28 职场文书
英语专业毕业生求职信
2014/05/24 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
教师个人事迹材料
2014/12/17 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
高三物理教学反思
2016/02/20 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
15个值得收藏的JavaScript函数
2021/09/15 Javascript
SpringBoot详解自定义Stater的应用
2022/07/15 Java/Android