JavaScript原型扩展常用工具函数库

作者:闭包旅人

时间:2026-10-25

浏览:172

本文整理了一套基于JavaScript原型扩展的常用工具函数,涵盖Array和Date、String对象。核心功能包括数组元素检索、日期格式化与差值计算、日期加减运算、字符串长度统计(含中文识别)、左右截取、匹配计数及空格去除。通过扩展原生原型,简化日常开发中的常见操作。

代码示例如下:

/** 
数组元素检索方法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;
} 

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章