扩展了内置对象Array Date String的方法
/******************Array 对象扩展***********************/ /** 去除数组中的重复项 **/ Array.prototype.removeRepeat = function () { var reset = [], done = {}; for (var i = 0; i < this.length; i++) { var temp = this[i]; //这里的json对象一定要以数组的方式访问,否则会认为找不到这个对象 if (!done[temp]) { done[temp] = true; reset.push(temp); } } return reset; }; //删除指定的数组 Array.prototype.del = function(n) { if (n<0) return this; return this.slice(0,n).concat(this.slice(n+1,this.length)); }; // 数组第一次出现指定元素值的位置 Array.prototype.indexOf = function(o) { for (var i=0; i<this.length; i++) if (this[i]==o) return i; return -1; }; /** * 检索数组元素(原型扩展或重载) * @param {o} 被检索的元素值 * @type int * @returns 元素索引 */ Array.prototype.contains = function(o) { var index = -1; for(var i=0;i<this.length;i++){if(this[i]==o){index = i;break;}} return index; }; /******************Date 对象扩展***********************/ Date.prototype.getWeek = function () { var a = new Array("日", "一", "二", "三", "四", "五", "六"); var week = new Date().getDay(); var str = a[week]; return str; }; //将指定的秒数加到此实例的值上 Date.prototype.addSeconds = function (value) { var second = this.getSeconds(); this.setSeconds(second + value); return this; }; //将指定的分钟数加到此实例的值上 Date.prototype.addMinutes = function (value) { var minute = this.getMinutes(); this.setMinutes(minute + value); return this; }; //将指定的小时数加到此实例的值上 Date.prototype.addHours = function (value) { var hour = this.getHours(); this.setHours(hour + value); return this; }; //将指定的天数加到此实例的值上 Date.prototype.addDays = function (value) { var date = this.getDate(); this.setDate(date + value); return this; }; //将指定的星期数加到此实例的值上 Date.prototype.addWeeks = function (value) { return this.addDays(value * 7); }; //将指定的月份数加到此实例的值上 Date.prototype.addMonths = function (value) { var month = this.getMonth(); this.setMonth(month + value); return this; }; //将指定的年份数加到此实例的值上 Date.prototype.addYears = function (value) { var year = this.getFullYear(); this.setFullYear(year + value); return this; }; /** * 日期格式化(原型扩展或重载) * 格式 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 boolean * @returns 是否为闰年 true/false */ Date.prototype.isLeapYear = function() { return (0==this.getYear()%4&&((this.getYear()%100!=0)||(this.getYear()%400==0))); }; /******************String 表单检查***********************/ //检查是否是URL地址 String.prototype.isURL=function(){ var re=/http[s]?:\/\/([\w-]+.)+[\w-]+(\/[\w-./?%&=]*)?/; var result = re.test(this); return result; }; //检查表单是否是email字符串 String.prototype.isEmail=function(){ var re=/\w+([-+.]\w+)*@\w+([-.]\w+)*.\w+([-.]\w+)*/; var result = re.test(this); return result; }; //检查号码,正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX String.prototype.isPhoneNumber=function(){ var re=/^((\d{3,4})|\d{3,4}-)?\d{7,8}$/; var result = re.test(this); return result; }; /******************String 数字检查***********************/ /** * 获取字符串长度(原型扩展或重载) * @type int * @returns 字符串长度 */ String.prototype.len = function() { var arr=this.match(/[^\x00-\xff]/ig); return this.length+(arr==null?0:arr.length); }; //检查是否是浮点数,包括0,包括正浮点数 负浮点数 String.prototype.isFloat=function(){ var re=/^-?([1-9]\d*.\d+|0.\d*[1-9]\d*|0?.0+|0)$/; var result = re.test(this); return result; }; //检查是否是非负浮点数,包括0 String.prototype.isFloatNegativ=function(isContainZero){ if(isContainZero){ var re=/(^-([1-9]\d*.\d+|0.\d*[1-9]\d*)$)|(0)/; var result = re.test(this); return result; }else{ var re=/^-([1-9]\d*.\d+|0.\d*[1-9]\d*)$/; var result = re.test(this); return result; } }; //检查是否是正浮点数,包括0 String.prototype.isFloatPositive=function(isContainZero){ if(isContainZero){ var re=/^[1-9]\d*.\d+|0.\d*[1-9]\d*|0?.0+|0$/; var result = re.test(this); return result; }else{ var re=/^[1-9]\d*.\d+|0.\d*[1-9]\d*$/; var result = re.test(this); return result; } }; //检查是否是整数,包括0,正整数,负整数 String.prototype.isInt = function(){ var re=/^-?\d+$/; var result = re.test(this); return result; }; /** * 检查是否是正整数 * isContainZero 是否包含0 */ String.prototype.isIntPositive = function(isContainZero){ if(isContainZero){ var re=/(^[0-9]*[1-9][0-9]*$)|(0)/; var result = re.test(this); return result; }else{ var re=/^[0-9]*[1-9][0-9]*$/; var result = re.test(this); return result; } }; /** * 检查是否是负整数 * isContainZero 是否包含0 */ String.prototype.isIntNegativ = function(isContainZero){ if(isContainZero){ var re=/(^-[0-9]*[1-9][0-9]*$)|(0)/; var result = re.test(this); return result; }else{ var re=/^-[0-9]*[1-9][0-9]*$/; var result = re.test(this); return result; } }; /******************String***********************/ //检查字符串是否是指定字符串开头,返回true 和 false String.prototype.isStartWith=function(str){ var reg=new RegExp("^"+str); return reg.test(this); }; //检查字符串是否是指定字符串结尾,返回true 和 false String.prototype.isEndWith=function(str){ var reg=new RegExp(str+"$"); return reg.test(this); }; //一个单词首字母大写,返回字符串 String.prototype.capitalize=function(){ var result = this.charAt(0).toUpperCase()+this.substring(1).toLocaleLowerCase(); return result; }; // 保留字母和空格,返回字符串 String.prototype.getEn = function() { var result = this.replace(/[^A-Z a-z]/g, ""); return result; }; //逆序 String.prototype.reverse = function() { return this.split("").reverse().join(""); }; //检查字符串是否包含自定字符串,返回true 和 false String.prototype.isContains=function(target){ var myReg = new RegExp(target); var result = myReg.test(this); return result; }; //去除两边的空格,返回字符串 String.prototype.trim = function() { var result = this.replace(/^\s+|\s+$/g, ""); return result; }; // 除去左边空白,返回字符串 String.prototype.trimLeft = function() { return this.replace(/^\s+/g, ""); }; // 除去右边空白,返回字符串 String.prototype.trimRight = function() { return this.replace(/\s+$/g, ""); }; // 去除所有的空白 String.prototype.delBlank = function() { var result = this.replace(/\s+/g, ""); return result; }; /** * 字符串转换为日期型(原型扩展或重载) * @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; }; //将json字符串转为json对象 String.prototype.toJson=function(){ return (new Function("return " + this))(); }; function obj2str(o){ var r = []; if(typeof o =="string") return "\""+o.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\""; if(typeof o =="undefined") return "undefined"; if(typeof o == "object"){ if(o===null) return "null"; else if(!o.sort){ for(var i in o) r.push(i+":"+obj2str(o[i])) r="{"+r.join()+"}" }else{ for(var i =0;i<o.length;i++) r.push(obj2str(o[i])) r="["+r.join()+"]" } return r; } return o.toString(); } //将json对象转为String function JsonToString(o) { var arr = []; var fmt = function(s) { if (typeof s == 'object' && s != null) return JsonToStr(s); return /^(string)$/.test(typeof s) ? '"' + s + '"' : s; } for (var i in o) arr.push("'" + i + "':" + fmt(o[i])); return '{' + arr.join(',') + '}'; }
测试方法
$(function(){ document.write("--------------------- Date对象扩展 ----------------------------------"+"<br>"); document.write('new Date().format("yyyy") : ' + new Date().format("yyyy")+"<br>"); document.write('new Date().format("MM") : ' + new Date().format("MM")+"<br>"); document.write('new Date().format("dd") : ' + new Date().format("dd")+"<br>"); document.write('new Date().format("yyyy-MM") : ' + new Date().format("yyyy-MM")+"<br>"); document.write('new Date().format("yyyy-MM-dd") : ' + new Date().format("yyyy-MM-dd")+"<br>"); document.write('new Date().format("MM-dd") : ' + new Date().format("MM-dd")+"<br>"); document.write('new Date().format("hh:mm:ss") : ' + new Date().format("hh:mm:ss")+"<br>"); document.write('new Date().format("hh") : ' + new Date().format("hh")+"<br>"); document.write('new Date().format("mm") : ' + new Date().format("mm")+"<br>"); document.write('new Date().format("ss") : ' + new Date().format("ss")+"<br>"); document.write('new Date().format("mm:ss") : ' + new Date().format("mm:ss") +"<br>"); document.write("--------------------- String对象扩展 ----------------------------------"+"<br>"); var myName = " huang biao "; //字符串长度 document.write("myName.len() : " + myName.len() +"<br>");//12 document.write("myName.trimLeft().len() : " + myName.trimLeft().len() +"<br>");//11 document.write("myName.trimRight().len() : " + myName.trimRight().len() +"<br>");//11 //去除空格 document.write("myName.trim().len() : " + myName.trim().len() +"<br>");//10 //删除空格 document.write("myName.delBlank() : " + myName.delBlank() +"<br>");//huangbiao //倒序 document.write("myName.delBlank().reverse() : " + myName.delBlank().reverse() +"<br>");//oaibgnauh document.write(" myName.isContains('huang') : " + myName.isContains("huang") +"<br>"); document.write(" myName.isContains('liu') : " + myName.isContains("liu") +"<br>"); document.write("myName.trim().capitalize() : " + myName.trim().capitalize() +"<br>"); document.write("myName.trim().isStartWith(\"huang\") : " + myName.trim().isStartWith("huang") +"<br>"); document.write("myName.trim().isStartWith(\"biao\") : " + myName.trim().isStartWith("biao") +"<br>"); document.write("myName.trim().isEndWith(\"huang\") : " + myName.trim().isEndWith("huang") +"<br>"); document.write("myName.trim().isEndWith(\"biao\") : " + myName.trim().isEndWith("biao") +"<br>"); document.write("--------------------- String对象扩展 内容校验 ----------------------------------"+"<br>"); document.write(" '0'.isInt() : " + '0'.isInt() +"<br>"); document.write(" '-12'.isInt() : " + '-12'.isInt() +"<br>"); document.write(" '12'.isInt() : " + '12'.isInt() +"<br>"); document.write("'12.3'.isInt() : " + '12.3'.isInt() +"<br>"); document.write("-----------"+"<br>"); document.write(" '0'.isIntPositive() : " + '0'.isIntPositive() +"<br>"); //是否包含0 document.write(" '0'.isIntPositive(true) : " + '0'.isIntPositive(true) +"<br>"); document.write(" '00'.isIntPositive(true) : " + '00'.isIntPositive(true) +"<br>"); document.write(" '-12'.isIntPositive() : " + '-12'.isIntPositive() +"<br>"); document.write(" '12'.isIntPositive() : " + '12'.isIntPositive() +"<br>"); document.write("'12.3'.isIntPositive() : " + '12.3'.isIntPositive() +"<br>"); document.write("-----------"+"<br>"); document.write(" '0'.isIntNegativ() : " + '0'.isIntNegativ() +"<br>"); //是否包含0 document.write(" '0'.isIntNegativ(true) : " + '0'.isIntNegativ(true) +"<br>"); document.write(" '00'.isIntNegativ(true) : " + '00'.isIntNegativ(true) +"<br>"); document.write(" '-12'.isIntNegativ() : " + '-12'.isIntNegativ() +"<br>"); document.write(" '12'.isIntNegativ() : " + '12'.isIntNegativ() +"<br>"); document.write("'12.3'.isIntNegativ() : " + '12.3'.isIntNegativ() +"<br>"); document.write("-----------"+"<br>"); document.write(" '0'.isFloat() : " + '0'.isFloat() +"<br>"); document.write(" '0'.isFloat(true) : " + '0'.isFloat(true) +"<br>"); document.write(" '-12'.isFloat() : " + '-12'.isFloat() +"<br>"); document.write(" '12'.isFloat() : " + '12'.isFloat() +"<br>"); document.write("'12.3'.isFloat() : " + '12.3'.isFloat() +"<br>"); document.write("'-12.3'.isFloat() : " + '-12.3'.isFloat() +"<br>"); document.write("'-12.3.3'.isFloat() : " + '-12.3.3'.isFloat() +"<br>"); document.write("-----------"+"<br>"); document.write(" '0'.isFloatNegativ() : " + '0'.isFloatNegativ() +"<br>"); document.write(" '0'.isFloatNegativ(true) : " + '0'.isFloatNegativ(true) +"<br>"); document.write(" '-12'.isFloatNegativ() : " + '-12'.isFloatNegativ() +"<br>"); document.write(" '12'.isFloatNegativ() : " + '12'.isFloatNegativ() +"<br>"); document.write("'12.3'.isFloatNegativ() : " + '12.3'.isFloatNegativ() +"<br>"); document.write("'-12.3'.isFloatNegativ() : " + '-12.3'.isFloatNegativ() +"<br>"); document.write("'-12.3.3'.isFloatNegativ() : " + '-12.3.3'.isFloatNegativ() +"<br>"); document.write("-----------"+"<br>"); document.write(" '0'.isFloatPositive() : " + '0'.isFloatPositive() +"<br>"); document.write(" '0'.isFloatPositive(true) : " + '0'.isFloatPositive(true) +"<br>"); document.write(" '-12'.isFloatPositive() : " + '-12'.isFloatPositive() +"<br>"); document.write(" '12'.isFloatPositive() : " + '12'.isFloatPositive() +"<br>"); document.write("'12.3'.isFloatPositive() : " + '12.3'.isFloatPositive() +"<br>"); document.write("'-12.3'.isFloatPositive() : " + '-12.3'.isFloatPositive() +"<br>"); document.write("'-12.3.3'.isFloatPositive() : " + '-12.3.3'.isFloatPositive() +"<br>"); document.write("-----------"+"<br>"); var personObj = { "name":"huangbiao", age:18 }; document.write("obj2str(personObj) : " + obj2str(personObj) +"<br>"); document.write("JsonToString(personObj) : " + JsonToString(personObj) +"<br>"); });