使用prototype扩展的JavaScript常用函数库
1 /**
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;}}
10 return index;
11 }
12
13 /**
14 * 日期格式化(原型扩展或重载)
15 * 格式 YYYY/yyyy/YY/yy 表示年份
16 * MM/M 月份
17 * W/w 星期
18 * dd/DD/d/D 日期
19 * hh/HH/h/H 时间
20 * mm/m 分钟
21 * ss/SS/s/S 秒
22 * @param {formatStr} 格式模版
23 * @type string
24 * @returns 日期字符串
25 */
26 Date.prototype.format = function(formatStr){
27 var str = formatStr;
28 var Week = ['日','一','二','三','四','五','六'];
29 str=str.replace(/yyyy|YYYY/,this.getFullYear());
30 str=str.replace(/yy|YY/,(this.getYear() % 100)>9?(this.getYear() % 100).toString():'0' + (this.getYear() % 100));
31 str=str.replace(/MM/,(this.getMonth()+1)>9?(this.getMonth()+1).toString():'0' + (this.getMonth()+1));
32 str=str.replace(/M/g,this.getMonth());
33 str=str.replace(/w|W/g,Week[this.getDay()]);
34 str=str.replace(/dd|DD/,this.getDate()>9?this.getDate().toString():'0' + this.getDate());
35 str=str.replace(/d|D/g,this.getDate());
36 str=str.replace(/hh|HH/,this.getHours()>9?this.getHours().toString():'0' + this.getHours());
37 str=str.replace(/h|H/g,this.getHours());
38 str=str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():'0' + this.getMinutes());
39 str=str.replace(/m/g,this.getMinutes());
40 str=str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():'0' + this.getSeconds());
41 str=str.replace(/s|S/g,this.getSeconds());
42 return str;
43 }
44
45 /**
46 * 比较日期差(原型扩展或重载)
47 * @param {strInterval} 日期类型:'y、m、d、h、n、s、w'
48 * @param {dtEnd} 格式为日期型或者 有效日期格式字符串
49 * @type int
50 * @returns 比较结果
51 */
52 Date.prototype.dateDiff = function(strInterval, dtEnd) {
53 var dtStart = this;
54 if (typeof dtEnd == 'string' ) { //如果是字符串转换为日期型
55 dtEnd = StringToDate(dtEnd);
56 }
57 switch (strInterval) {
58 case 's' :return parseInt((dtEnd - dtStart) / 1000);
59 case 'n' :return parseInt((dtEnd - dtStart) / 60000);
60 case 'h' :return parseInt((dtEnd - dtStart) / 3600000);
61 case 'd' :return parseInt((dtEnd - dtStart) / 86400000);
62 case 'w' :return parseInt((dtEnd - dtStart) / (86400000 * 7));
63 case 'm' :return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1);
64 case 'y' :return dtEnd.getFullYear() - dtStart.getFullYear();
65 }
66 }
67
68 /**
69 * 日期计算(原型扩展或重载)
70 * @param {strInterval} 日期类型:'y、m、d、h、n、s、w'
71 * @param {Number} 数量
72 * @type Date
73 * @returns 计算后的日期
74 */
75 Date.prototype.dateAdd = function(strInterval, Number) {
76 var dtTmp = this;
77 switch (strInterval) {
78 case 's' :return new Date(Date.parse(dtTmp) + (1000 * Number));
79 case 'n' :return new Date(Date.parse(dtTmp) + (60000 * Number));
80 case 'h' :return new Date(Date.parse(dtTmp) + (3600000 * Number));
81 case 'd' :return new Date(Date.parse(dtTmp) + (86400000 * Number));
82 case 'w' :return new Date(Date.parse(dtTmp) + ((86400000 * 7) * Number));
83 case 'q' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number*3, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
84 case 'm' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
85 case 'y' :return new Date((dtTmp.getFullYear() + Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
86 }
87 }
88
89 /**
90 * 取得日期数据信息(原型扩展或重载)
91 * @param {interval} 日期类型:'y、m、d、h、n、s、w'
92 * @type int
93 * @returns 指定的日期部分
94 */
95 Date.prototype.datePart = function(interval){
96 var myDate = this;
97 var partStr='';
98 var Week = ['日','一','二','三','四','五','六'];
99 switch (interval)
100 {
101 case 'y' :partStr = myDate.getFullYear();break;
102 case 'm' :partStr = myDate.getMonth()+1;break;
103 case 'd' :partStr = myDate.getDate();break;
104 case 'w' :partStr = Week[myDate.getDay()];break;
105 case 'ww' :partStr = myDate.WeekNumOfYear();break;
106 case 'h' :partStr = myDate.getHours();break;
107 case 'n' :partStr = myDate.getMinutes();break;
108 case 's' :partStr = myDate.getSeconds();break;
109 }
110 return partStr;
111 }
112
113 /**
114 * 把日期分割成数组(原型扩展或重载)
115 * @type array
116 * @returns 日期数组
117 */
118 Date.prototype.toArray = function() {
119 var myDate = this;
120 var myArray = Array();
121 myArray[0] = myDate.getFullYear();
122 myArray[1] = myDate.getMonth()+1;
123 myArray[2] = myDate.getDate();
124 myArray[3] = myDate.getHours();
125 myArray[4] = myDate.getMinutes();
126 myArray[5] = myDate.getSeconds();
127 return myArray;
128 }
129
130 /**
131 * 取得当前月份的天数(原型扩展或重载)
132 * @type int
133 * @returns 天数
134 */
135 Date.prototype.daysOfMonth = function(){
136 var myDate = this;
137 var ary = myDate.toArray();
138 var date1 = (new Date(ary[0],ary[1]+1,1));
139 var date2 = date1.dateAdd('m',1);
140 var result = daysDiff(date1.format('yyyy-MM-dd'),date2.format('yyyy-MM-dd'));
141 return result;
142 }
143
144 /**
145 * 判断闰年(原型扩展或重载)
146 * @type boolean
147 * @returns 是否为闰年 true/false
148 */
149 Date.prototype.isLeapYear = function() {
150 return (0==this.getYear()%4&&((this.getYear()%100!=0)||(this.getYear()%400==0)));
151 }
152
153 /**
154 * 比较两个日期的天数差(自定义)
155 * @param {DateOne} 日期一
156 * @param {DateOne} 日期二
157 * @type int
158 * @returns 比较结果
159 */
160 function daysDiff(DateOne,DateTwo)
161 {
162 var OneMonth = DateOne.substring(5,DateOne.lastIndexOf ('-'));
163 var OneDay = DateOne.substring(DateOne.length,DateOne.lastIndexOf ('-')+1);
164 var OneYear = DateOne.substring(0,DateOne.indexOf ('-'));
165
166 var TwoMonth = DateTwo.substring(5,DateTwo.lastIndexOf ('-'));
167 var TwoDay = DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ('-')+1);
168 var TwoYear = DateTwo.substring(0,DateTwo.indexOf ('-'));
169
170 var cha=((Date.parse(OneMonth+'/'+OneDay+'/'+OneYear)- Date.parse(TwoMonth+'/'+TwoDay+'/'+TwoYear))/86400000);
171 return Math.abs(cha);
172 }
173
174 /**
175 * 日期计算(自定义)
176 * @param {strInterval} 日期类型:'y、m、d、h、n、s、w'
177 * @param {Number} 数量
178 * @param {prmDate} 原日期
179 * @type Date
180 * @returns 计算后的日期
181 */
182 function dateAdd(interval,number,prmDate){
183 number = parseInt(number);
184 if (typeof(prmDate)=="string"){
185 prmDate = prmDate.split(/\D/);
186 --prmDate[1];
187 eval("var prmDate = new Date("+prmDate.join(",")+")");
188 }
189 if (typeof(prmDate)=="object"){
190 var prmDate = prmDate
191 }
192 switch(interval){
193 case "y": prmDate.setFullYear(prmDate.getFullYear()+number); break;
194 case "m": prmDate.setMonth(prmDate.getMonth()+number); break;
195 case "d": prmDate.setDate(prmDate.getDate()+number); break;
196 case "w": prmDate.setDate(prmDate.getDate()+7*number); break;
197 case "h": prmDate.setHours(prmDate.getHour()+number); break;
198 case "n": prmDate.setMinutes(prmDate.getMinutes()+number); break;
199 case "s": prmDate.setSeconds(prmDate.getSeconds()+number); break;
200 case "l": prmDate.setMilliseconds(prmDate.getMilliseconds()+number); break;
201 }
202 return prmDate;
203 }
204
205 /**
206 * 获取字符串长度(原型扩展或重载)
207 * @type int
208 * @returns 字符串长度
209 */
210 String.prototype.len = function() {
211 var arr=this.match(/[^\x00-\xff]/ig);
212 return this.length+(arr==null?0:arr.length);
213 }
214
215 /**
216 * 字符串左取指定个数的字符(原型扩展或重载)
217 * @param {num} 获取个数
218 * @type string
219 * @returns 匹配的字符串
220 */
221 String.prototype.left = function(num,mode) {
222 if(!/\d+/.test(num)) return(this);
223 var str = this.substr(0,num);
224 if(!mode) return str;
225 var n = str.len() - str.length;
226 num = num - parseInt(n/2);
227 return this.substr(0,num);
228 }
229
230 /**
231 * 字符串右取指定个数的字符(原型扩展或重载)
232 * @param {num} 获取个数
233 * @type string
234 * @returns 匹配的字符串
235 */
236 String.prototype.right = function(num,mode) {
237 if(!/\d+/.test(num)) return(this);
238 var str = this.substr(this.length-num);
239 if(!mode) return str;
240 var n = str.len() - str.length;
241 num = num - parseInt(n/2);
242 return this.substr(this.length-num);
243 }
244
245 /**
246 * 字符串包含(原型扩展或重载)
247 * @param {string: str} 要搜索的子字符串
248 * @param {bool: mode} 是否忽略大小写
249 * @type int
250 * @returns 匹配的个数
251 */
252 String.prototype.matchCount = function(str,mode) {
253 return eval("this.match(/("+str+")/g"+(mode?"i":"")+").length");
254 }
255
256 /**
257 * 去除左右空格(原型扩展或重载)
258 * @type string
259 * @returns 处理后的字符串
260 */
261 String.prototype.trim = function() {
262 return this.replace(/(^\s*)|(\s*$)/g,"");
263 }
264
265 /**
266 * 去除左空格(原型扩展或重载)
267 * @type string
268 * @returns 处理后的字符串
269 */
270 String.prototype.lTrim = function() {
271 return this.replace(/(^\s*)/g, "");
272 }
273
274 /**
275 * 去除右空格(原型扩展或重载)
276 * @type string
277 * @returns 处理后的字符串
278 */
279 String.prototype.rTrim = function() {
280 return this.replace(/(\s*$)/g, "");
281 }
282
283 /**
284 * 字符串转换为日期型(原型扩展或重载)
285 * @type Date
286 * @returns 日期
287 */
288 String.prototype.toDate = function() {
289 var converted = Date.parse(this);
290 var myDate = new Date(converted);
291 if (isNaN(myDate)) {var arys= this.split('-'); myDate = new Date(arys[0],--arys[1],arys[2]); }
292 return myDate;
293 }
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;}}
10 return index;
11 }
12
13 /**
14 * 日期格式化(原型扩展或重载)
15 * 格式 YYYY/yyyy/YY/yy 表示年份
16 * MM/M 月份
17 * W/w 星期
18 * dd/DD/d/D 日期
19 * hh/HH/h/H 时间
20 * mm/m 分钟
21 * ss/SS/s/S 秒
22 * @param {formatStr} 格式模版
23 * @type string
24 * @returns 日期字符串
25 */
26 Date.prototype.format = function(formatStr){
27 var str = formatStr;
28 var Week = ['日','一','二','三','四','五','六'];
29 str=str.replace(/yyyy|YYYY/,this.getFullYear());
30 str=str.replace(/yy|YY/,(this.getYear() % 100)>9?(this.getYear() % 100).toString():'0' + (this.getYear() % 100));
31 str=str.replace(/MM/,(this.getMonth()+1)>9?(this.getMonth()+1).toString():'0' + (this.getMonth()+1));
32 str=str.replace(/M/g,this.getMonth());
33 str=str.replace(/w|W/g,Week[this.getDay()]);
34 str=str.replace(/dd|DD/,this.getDate()>9?this.getDate().toString():'0' + this.getDate());
35 str=str.replace(/d|D/g,this.getDate());
36 str=str.replace(/hh|HH/,this.getHours()>9?this.getHours().toString():'0' + this.getHours());
37 str=str.replace(/h|H/g,this.getHours());
38 str=str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():'0' + this.getMinutes());
39 str=str.replace(/m/g,this.getMinutes());
40 str=str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():'0' + this.getSeconds());
41 str=str.replace(/s|S/g,this.getSeconds());
42 return str;
43 }
44
45 /**
46 * 比较日期差(原型扩展或重载)
47 * @param {strInterval} 日期类型:'y、m、d、h、n、s、w'
48 * @param {dtEnd} 格式为日期型或者 有效日期格式字符串
49 * @type int
50 * @returns 比较结果
51 */
52 Date.prototype.dateDiff = function(strInterval, dtEnd) {
53 var dtStart = this;
54 if (typeof dtEnd == 'string' ) { //如果是字符串转换为日期型
55 dtEnd = StringToDate(dtEnd);
56 }
57 switch (strInterval) {
58 case 's' :return parseInt((dtEnd - dtStart) / 1000);
59 case 'n' :return parseInt((dtEnd - dtStart) / 60000);
60 case 'h' :return parseInt((dtEnd - dtStart) / 3600000);
61 case 'd' :return parseInt((dtEnd - dtStart) / 86400000);
62 case 'w' :return parseInt((dtEnd - dtStart) / (86400000 * 7));
63 case 'm' :return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1);
64 case 'y' :return dtEnd.getFullYear() - dtStart.getFullYear();
65 }
66 }
67
68 /**
69 * 日期计算(原型扩展或重载)
70 * @param {strInterval} 日期类型:'y、m、d、h、n、s、w'
71 * @param {Number} 数量
72 * @type Date
73 * @returns 计算后的日期
74 */
75 Date.prototype.dateAdd = function(strInterval, Number) {
76 var dtTmp = this;
77 switch (strInterval) {
78 case 's' :return new Date(Date.parse(dtTmp) + (1000 * Number));
79 case 'n' :return new Date(Date.parse(dtTmp) + (60000 * Number));
80 case 'h' :return new Date(Date.parse(dtTmp) + (3600000 * Number));
81 case 'd' :return new Date(Date.parse(dtTmp) + (86400000 * Number));
82 case 'w' :return new Date(Date.parse(dtTmp) + ((86400000 * 7) * Number));
83 case 'q' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number*3, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
84 case 'm' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
85 case 'y' :return new Date((dtTmp.getFullYear() + Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
86 }
87 }
88
89 /**
90 * 取得日期数据信息(原型扩展或重载)
91 * @param {interval} 日期类型:'y、m、d、h、n、s、w'
92 * @type int
93 * @returns 指定的日期部分
94 */
95 Date.prototype.datePart = function(interval){
96 var myDate = this;
97 var partStr='';
98 var Week = ['日','一','二','三','四','五','六'];
99 switch (interval)
100 {
101 case 'y' :partStr = myDate.getFullYear();break;
102 case 'm' :partStr = myDate.getMonth()+1;break;
103 case 'd' :partStr = myDate.getDate();break;
104 case 'w' :partStr = Week[myDate.getDay()];break;
105 case 'ww' :partStr = myDate.WeekNumOfYear();break;
106 case 'h' :partStr = myDate.getHours();break;
107 case 'n' :partStr = myDate.getMinutes();break;
108 case 's' :partStr = myDate.getSeconds();break;
109 }
110 return partStr;
111 }
112
113 /**
114 * 把日期分割成数组(原型扩展或重载)
115 * @type array
116 * @returns 日期数组
117 */
118 Date.prototype.toArray = function() {
119 var myDate = this;
120 var myArray = Array();
121 myArray[0] = myDate.getFullYear();
122 myArray[1] = myDate.getMonth()+1;
123 myArray[2] = myDate.getDate();
124 myArray[3] = myDate.getHours();
125 myArray[4] = myDate.getMinutes();
126 myArray[5] = myDate.getSeconds();
127 return myArray;
128 }
129
130 /**
131 * 取得当前月份的天数(原型扩展或重载)
132 * @type int
133 * @returns 天数
134 */
135 Date.prototype.daysOfMonth = function(){
136 var myDate = this;
137 var ary = myDate.toArray();
138 var date1 = (new Date(ary[0],ary[1]+1,1));
139 var date2 = date1.dateAdd('m',1);
140 var result = daysDiff(date1.format('yyyy-MM-dd'),date2.format('yyyy-MM-dd'));
141 return result;
142 }
143
144 /**
145 * 判断闰年(原型扩展或重载)
146 * @type boolean
147 * @returns 是否为闰年 true/false
148 */
149 Date.prototype.isLeapYear = function() {
150 return (0==this.getYear()%4&&((this.getYear()%100!=0)||(this.getYear()%400==0)));
151 }
152
153 /**
154 * 比较两个日期的天数差(自定义)
155 * @param {DateOne} 日期一
156 * @param {DateOne} 日期二
157 * @type int
158 * @returns 比较结果
159 */
160 function daysDiff(DateOne,DateTwo)
161 {
162 var OneMonth = DateOne.substring(5,DateOne.lastIndexOf ('-'));
163 var OneDay = DateOne.substring(DateOne.length,DateOne.lastIndexOf ('-')+1);
164 var OneYear = DateOne.substring(0,DateOne.indexOf ('-'));
165
166 var TwoMonth = DateTwo.substring(5,DateTwo.lastIndexOf ('-'));
167 var TwoDay = DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ('-')+1);
168 var TwoYear = DateTwo.substring(0,DateTwo.indexOf ('-'));
169
170 var cha=((Date.parse(OneMonth+'/'+OneDay+'/'+OneYear)- Date.parse(TwoMonth+'/'+TwoDay+'/'+TwoYear))/86400000);
171 return Math.abs(cha);
172 }
173
174 /**
175 * 日期计算(自定义)
176 * @param {strInterval} 日期类型:'y、m、d、h、n、s、w'
177 * @param {Number} 数量
178 * @param {prmDate} 原日期
179 * @type Date
180 * @returns 计算后的日期
181 */
182 function dateAdd(interval,number,prmDate){
183 number = parseInt(number);
184 if (typeof(prmDate)=="string"){
185 prmDate = prmDate.split(/\D/);
186 --prmDate[1];
187 eval("var prmDate = new Date("+prmDate.join(",")+")");
188 }
189 if (typeof(prmDate)=="object"){
190 var prmDate = prmDate
191 }
192 switch(interval){
193 case "y": prmDate.setFullYear(prmDate.getFullYear()+number); break;
194 case "m": prmDate.setMonth(prmDate.getMonth()+number); break;
195 case "d": prmDate.setDate(prmDate.getDate()+number); break;
196 case "w": prmDate.setDate(prmDate.getDate()+7*number); break;
197 case "h": prmDate.setHours(prmDate.getHour()+number); break;
198 case "n": prmDate.setMinutes(prmDate.getMinutes()+number); break;
199 case "s": prmDate.setSeconds(prmDate.getSeconds()+number); break;
200 case "l": prmDate.setMilliseconds(prmDate.getMilliseconds()+number); break;
201 }
202 return prmDate;
203 }
204
205 /**
206 * 获取字符串长度(原型扩展或重载)
207 * @type int
208 * @returns 字符串长度
209 */
210 String.prototype.len = function() {
211 var arr=this.match(/[^\x00-\xff]/ig);
212 return this.length+(arr==null?0:arr.length);
213 }
214
215 /**
216 * 字符串左取指定个数的字符(原型扩展或重载)
217 * @param {num} 获取个数
218 * @type string
219 * @returns 匹配的字符串
220 */
221 String.prototype.left = function(num,mode) {
222 if(!/\d+/.test(num)) return(this);
223 var str = this.substr(0,num);
224 if(!mode) return str;
225 var n = str.len() - str.length;
226 num = num - parseInt(n/2);
227 return this.substr(0,num);
228 }
229
230 /**
231 * 字符串右取指定个数的字符(原型扩展或重载)
232 * @param {num} 获取个数
233 * @type string
234 * @returns 匹配的字符串
235 */
236 String.prototype.right = function(num,mode) {
237 if(!/\d+/.test(num)) return(this);
238 var str = this.substr(this.length-num);
239 if(!mode) return str;
240 var n = str.len() - str.length;
241 num = num - parseInt(n/2);
242 return this.substr(this.length-num);
243 }
244
245 /**
246 * 字符串包含(原型扩展或重载)
247 * @param {string: str} 要搜索的子字符串
248 * @param {bool: mode} 是否忽略大小写
249 * @type int
250 * @returns 匹配的个数
251 */
252 String.prototype.matchCount = function(str,mode) {
253 return eval("this.match(/("+str+")/g"+(mode?"i":"")+").length");
254 }
255
256 /**
257 * 去除左右空格(原型扩展或重载)
258 * @type string
259 * @returns 处理后的字符串
260 */
261 String.prototype.trim = function() {
262 return this.replace(/(^\s*)|(\s*$)/g,"");
263 }
264
265 /**
266 * 去除左空格(原型扩展或重载)
267 * @type string
268 * @returns 处理后的字符串
269 */
270 String.prototype.lTrim = function() {
271 return this.replace(/(^\s*)/g, "");
272 }
273
274 /**
275 * 去除右空格(原型扩展或重载)
276 * @type string
277 * @returns 处理后的字符串
278 */
279 String.prototype.rTrim = function() {
280 return this.replace(/(\s*$)/g, "");
281 }
282
283 /**
284 * 字符串转换为日期型(原型扩展或重载)
285 * @type Date
286 * @returns 日期
287 */
288 String.prototype.toDate = function() {
289 var converted = Date.parse(this);
290 var myDate = new Date(converted);
291 if (isNaN(myDate)) {var arys= this.split('-'); myDate = new Date(arys[0],--arys[1],arys[2]); }
292 return myDate;
293 }
版权声明: 本文为博主 网无忌 原创文章,欢迎转载,但请务必标注原文链接。
本文链接: https://www.cnblogs.com/netWild/archive/2010/11/30/1892326.html