javascript:工具包(2016/11/17)

/**
 * RegUtils
 * g(全局)会记录匹配的位置
 */
var ipReg = new RegExp(/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/);

if(typeof jQuery === "undefined"){
	jQuery = $ = {};
}

/**
 * IpUtils
 */
(function($, undefined ) {
	/**
	 * Ip与Number的相互转换
	 */
	$.ip = {};
	
	$.ip.ipToNumber = function(ip) {
		if(!$.type.is(ip, "String")) {console.error("ipToNumber(ip) ip only String"); return undefined};
		var ips = 0, numbers = ip.split(".");
		for (var i = 0; i < 4; ++i) {
			ips = ips << 8 | parseInt(numbers[i]);
		}
		return ips;   
	}    
	  
	$.ip.numberToIp = function(number) {
		if(!$.type.is(number, "Number")) {console.error("numberToIp(number) number only Number"); return undefined};
		var ip = [];
		for (var i = 3; i >= 0; i--) {
			ip[i] = number & 0xff;
			number = number >> 8;
		}
		return ip.join(".");			    
	}
	
	/**
	 * 检测ip是否是否重复
	 */
	$.ip.isDuplicate = function(sourceFrom, sourceTo, targetFrom, targetTo){
		if(!$.type.is(sourceFrom, "String") || !ipReg.test(sourceFrom)) {console.error("isDuplicate(sourceFrom, sourceTo, targetFrom, targetTo) sourceFrom only String and ip format"); return false};
		if(!$.type.is(sourceTo, "String") || !ipReg.test(sourceTo)) {console.error("isDuplicate(sourceFrom, sourceTo, targetFrom, targetTo) sourceTo only String and ip format"); return false};
		if(!$.type.is(targetFrom, "String") || !ipReg.test(targetFrom)) {console.error("isDuplicate(sourceFrom, sourceTo, targetFrom, targetTo) targetFrom only String and ip format"); return false};
		if(!$.type.is(targetTo, "Undefined") && (!$.type.is(targetTo, "String") || !ipReg.test(targetTo))) {console.error("isDuplicate(sourceFrom, sourceTo, targetFrom, targetTo) targetTo only String and ip format"); return false};
		if($.ip.ipToNumber(sourceFrom) <= $.ip.ipToNumber(targetFrom) && $.ip.ipToNumber(sourceTo) >= $.ip.ipToNumber(targetFrom)){
			return true;
		}
		if(targetTo !== undefined && $.ip.ipToNumber(sourceFrom) <= $.ip.ipToNumber(targetTo) && $.ip.ipToNumber(sourceTo) >= $.ip.ipToNumber(targetTo)){
			return true;
		}
		return false
	}
})(jQuery);

/**
 * DataUtils
 */
var WEEK = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];

var MONTH = ["January", "Feburary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

var QUARTER = ["Spring", "Summer", "Autumn", "Winter"];

var PERIOD = ["AM", "PM"];

/**
 * 对应Windows中Java获取的时区
 * Object是无序的
 * 同一个时区里面,只能有一个标准(isStandard)
 */
var TIMEZONE = {
	"GMT-12:00":{code:"GMT-12:00", offsetHours:"-1200", offset:720, name:"GMT-12:00", isStandard:true},
	"GMT-11:00":{code:"GMT-11:00", offsetHours:"-1100", offset:660, name:"GMT-11:00", isStandard:true},
	"HST":{code:"HST", offsetHours:"-1000", offset:600, name:"Hawaii Standard Time", isStandard:true},
	"AKST":{code:"AKST", offsetHours:"-0900", offset:540, name:"Alaska Standard Time", isStandard:true},
	"PST":{code:"PST", offsetHours:"-0800", offset:480, name:"Pacific Standard Time", isStandard:true},
	"MST":{code:"MST", offsetHours:"-0700", offset:420, name:"Mountain Standard Time", isStandard:true},
	"CST_":{code:"CST", offsetHours:"-0600", offset:360, name:"Central Standard Time", isStandard:true},
	
	"EST":{code:"EST", offsetHours:"-0500", offset:300, name:"Eastern Standard Time", isStandard:true},
	"COT":{code:"COT", offsetHours:"-0500", offset:300, name:"Colombia Time"},
	
	"VET":{code:"VET", offsetHours:"-0430", offset:270, name:"Venezuela Time", isStandard:true},
	
	"AST":{code:"AST", offsetHours:"-0400", offset:240, name:"Atlantic Standard Time", isStandard:true},
	"BOT":{code:"BOT", offsetHours:"-0400", offset:240, name:"Bolivia Time"},
	"PYST":{code:"PYST", offsetHours:"-0400", offset:240, name:"Paraguay Summer Time"},
	
	"NST":{code:"NST", offsetHours:"-0330", offset:210, name:"Newfoundland Standard Time"},
	
	"ADT":{code:"ADT", offsetHours:"-0300", offset:180, name:"Atlantic Daylight Time", isStandard:true},
	"AMST":{code:"AMST", offsetHours:"-0300", offset:180, name:"Amazon Summer Time"},
	"CLT":{code:"CLT", offsetHours:"-0300", offset:180, name:"Chile Time"},
	"ART":{code:"ART", offsetHours:"-0300", offset:180, name:"Argentine Time"},
	"WGT":{code:"WGT", offsetHours:"-0300", offset:180, name:"Western Greenland Time"},
	"GFT":{code:"GFT", offsetHours:"-0300", offset:180, name:"French Guiana Time"},
	
	"GMT-02:00":{code:"GMT-02:00", offsetHours:"-0200", offset:120, name:"GMT-02:00", isStandard:true},
	"GST":{code:"GST", offsetHours:"-0200", offset:120, name:"South Georgia Standard Time"},
	"BRST":{code:"BRST", offsetHours:"-0200", offset:120, name:"Brasilia Summer Time"},
	"UYST":{code:"UYST", offsetHours:"-0200", offset:120, name:"Uruguay Summer Time"},
	"GST":{code:"GST", offsetHours:"-0200", offset:120, name:"South Georgia Standard Time"},
	
	"CVT":{code:"CVT", offsetHours:"-0100", offset:60, name:"Cape Verde Time", isStandard:true},
	"AZOT":{code:"AZOT", offsetHours:"-0100", offset:60, name:"Azores Time"},
	
	"GMT":{code:"GMT", offsetHours:"+0000", offset:0, name:"Greenwich Mean Time", isStandard:true},
	"WET":{code:"WET", offsetHours:"+0000", offset:0, name:"Western European Time"},
	"UTC":{code:"UTC", offsetHours:"+0000", offset:0, name:"Coordinated Universal Time"},
	
	"CET":{code:"CET", offsetHours:"+0100", offset:-60, name:"Central European Time", isStandard:true},
	"WAT":{code:"WAT", offsetHours:"+0100", offset:-60, name:"Western African Time"},
	
	"EET":{code:"EET", offsetHours:"+0200", offset:-120, name:"Eastern European Time", isStandard:true},
	"WAST":{code:"WAST", offsetHours:"+0200", offset:-120, name:"Western African Summer Time"},
	"CAT":{code:"CAT", offsetHours:"+0200", offset:-120, name:"Central African Time"},
	"IST":{code:"IST", offsetHours:"+0200", offset:-120, name:"Israel Standard Time"},
	
	//冲突
	"AST_":{code:"AST", offsetHours:"+0300", offset:-180, name:"Arabia Standard Time"},
	"MSK":{code:"MSK", offsetHours:"+0300", offset:-180, name:"Moscow Standard Time", isStandard:true},
	"EAT":{code:"EAT", offsetHours:"+0300", offset:-180, name:"Eastern African Time"},
	
	"IRST":{code:"IRST", offsetHours:"+0330", offset:-210, name:"Iran Standard Time", isStandard:true},
	
	"GST":{code:"GST", offsetHours:"+0400", offset:-240, name:"Gulf Standard Time", isStandard:true},
	"AMT":{code:"AMT", offsetHours:"+0400", offset:-240, name:"Armenia Time"},
	"AZT":{code:"AZT", offsetHours:"+0400", offset:-240, name:"Azerbaijan Time"},
	"GET":{code:"GET", offsetHours:"+0400", offset:-240, name:"Georgia Time"},
	"MUT":{code:"MUT", offsetHours:"+0400", offset:-240, name:"Mauritius Time"},
	
	"AFT":{code:"AFT", offsetHours:"+0430", offset:-270, name:"Afghanistan Time", isStandard:true},
	
	"UZT":{code:"UZT", offsetHours:"+0500", offset:-300, name:"Uzbekistan Time", isStandard:true},
	"YEKT":{code:"YEKT", offsetHours:"+0500", offset:-300, name:"Yekaterinburg Time"},
	"PKT":{code:"PKT", offsetHours:"+0500", offset:-300, name:"Pakistan Time"},
	
	"IST":{code:"IST", offsetHours:"+0530", offset:-330, name:"India Standard Time", isStandard:true},
	
	"NPT":{code:"NPT", offsetHours:"+0545", offset:-345, name:"Nepal Time", isStandard:true},
	
	"NOVT":{code:"NOVT", offsetHours:"+0600", offset:-360, name:"Novosibirsk Time", isStandard:true},
	"ALMT":{code:"ALMT", offsetHours:"+0600", offset:-360, name:"Alma-Ata Time"},
	"BDT":{code:"BDT", offsetHours:"+0600", offset:-360, name:"Bangladesh Time"},
	
	"MMT":{code:"MMT", offsetHours:"+0630", offset:-390, name:"Myanmar Time", isStandard:true},
	
	"ICT":{code:"ICT", offsetHours:"+0700", offset:-420, name:"Indochina Time", isStandard:true},
	"KRAT":{code:"KRAT", offsetHours:"+0700", offset:-420, name:"Krasnoyarsk Time"},
	
	"CST":{code:"CST", offsetHours:"+0800", offset:-480, name:"China Standard Time", isStandard:true},
	"SGT":{code:"SGT", offsetHours:"+0800", offset:-480, name:"Singapore Time"},
	"AWST":{code:"AWST", offsetHours:"+0800", offset:-480, name:"Australian Western Standard Time"},
	"ULAT":{code:"ULAT", offsetHours:"+0800", offset:-480, name:"Ulaanbaatar Time"},
	"IRKT":{code:"IRKT", offsetHours:"+0800", offset:-480, name:"Irkutsk Time"},
	
	"JST":{code:"JST", offsetHours:"+0900", offset:-540, name:"Japan Standard Time", isStandard:true},
	"KST":{code:"KST", offsetHours:"+0900", offset:-540, name:"Korea Standard Time"},
	"YAKT":{code:"YAKT", offsetHours:"+0900", offset:-540, name:"Yakutsk Time"},
	
	"ACST":{code:"ACST", offsetHours:"+0930", offset:-570, name:"Australian Central Standard Time (Northern Territory)", isStandard:true},
	
	"AEST":{code:"AEST", offsetHours:"+1000", offset:-600, name:"Australian Eastern Standard Time (Queensland)", isStandard:true},
	"VLAT":{code:"VLAT", offsetHours:"+1000", offset:-600, name:"Vladivostok Time"},
	"ChST":{code:"ChST", offsetHours:"+1000", offset:-600, name:"Chamorro Standard Time"},
	"MAGT":{code:"MAGT", offsetHours:"+1000", offset:-600, name:"Magadan Time"},
	
	"ACDT":{code:"ACDT", offsetHours:"+1030", offset:-630, name:"Australian Central Daylight Time (South Australia)", isStandard:true},
	
	"AEDT":{code:"AEDT", offsetHours:"+1100", offset:-660, name:"Australian Eastern Daylight Time (New South Wales)", isStandard:true},
	"AEDT_":{code:"AEDT", offsetHours:"+1100", offset:-660, name:"Australian Eastern Daylight Time (Tasmania)"},
	"SBT":{code:"SBT", offsetHours:"+1100", offset:-660, name:"Solomon Is. Time"},
	
	"NZST":{code:"NZST", offsetHours:"+1200", offset:-720, name:"New Zealand Standard Time", isStandard:true},
	
	"NZDT":{code:"NZDT", offsetHours:"+1300", offset:-780, name:"New Zealand Daylight Time", isStandard:true},
	"FJST":{code:"FJST", offsetHours:"+1300", offset:-780, name:"Fiji Summer Time"},
	"TOT":{code:"TOT", offsetHours:"+1300", offset:-780, name:"Tonga Time"},
	
	"WSDT":{code:"WSDT", offsetHours:"+1400", offset:-840, name:"West Samoa Daylight Time", isStandard:true},
};

(function($, undefined ) {
	$.date = {};
	
	$.date.formatToString = function(date, fmt, timeZone) {
		if(!$.type.is(date, "Date")) {console.error("formatToString(date, fmt, timeZone) date only Date"); return undefined;};
		if(!$.type.getType(fmt, "Undefined") && !$.type.is(fmt, "String")) {console.error("formatToString(date, fmt, timeZone) fmt only String"); return date;};
		if(!$.type.getType(timeZone, "Undefined") && !$.type.is(timeZone, "String")) {console.error("formatToString(date, fmt, timeZone) timeZone only String"); return date;};
		var timeZone_;
		for(var i in TIMEZONE){
			if(timeZone !== undefined && TIMEZONE[i].code === timeZone && TIMEZONE[i].isStandard){
				timeZone_ = TIMEZONE[i];
				//如果timeZone不为空,加入时间的偏移量
				date = new Date(date.getTime() + date.getTimezoneOffset()*60*1000 - timeZone_.offset*60*1000)
				break;
			}
			if(timeZone === undefined && TIMEZONE[i].offset === date.getTimezoneOffset() && TIMEZONE[i].isStandard){
				timeZone_ = TIMEZONE[i];
				break;
			}
		}
		var o = {
	    	"y+" : date.getFullYear(),           
		    "M+" : date.getMonth(), //月份
		    "E+" : date.getDay(),           
		    "d+" : date.getDate(), //日
		    "a+" : date.getHours() < 12 ? 0 : 1,
		    "Z+" : date.getTimezoneOffset(), //单位分钟
		    "z+" : date.getTimezoneOffset(), //单位分钟
		    "h+" : date.getHours()%12 == 0 ? 12 : date.getHours()%12, //小时           
		    "H+" : date.getHours(), //小时           
		    "m+" : date.getMinutes(), //分           
		    "s+" : date.getSeconds(), //秒           
		    "q+" : Math.floor(date.getMonth()/3), //季度           
		    "S+" : date.getMilliseconds() //毫秒           
	    };
	    var parms = [];
	    for(var k in o){
	   		 /*
		    	console.log(new RegExp("("+ k +")("+ k +")").exec(fmt));
		    	console.log(fmt.search(new RegExp("("+ k +")")));
		    	console.log(fmt.match(new RegExp("("+ k +")", "g")));
	    	*/
			while(new RegExp("("+ k +")").test(fmt)){           
           		fmt = fmt.replace(RegExp.$1,  function(oldStr, index, fmt){
	            	/*
	            	 	RegExp.$1 === oldStr
	            	 	如果在函数内用正则表达式的话,RegExp.$1会被替换掉,可以用oldStr替代
           			*/
	            	if(k === "y+" && RegExp.$1.length < 4){
				        return (o[k]+"").substr(2);           
				    }
	            	
	            	if(k === "Z+"){
				    	return "GMT" + timeZone_.offsetHours;
				    }
	            	
	            	/*
				    	替换为英文名称后会影响到之后的匹配,所以先用{\d}替换,value保存在Array
				    	等整个替换完成之后,再去替换{\d}
				    */
	            	if(k === "z+"){
	            		parms.push(oldStr.length <= 3 ? timeZone_.code : timeZone_.name);
	            		return "{" + (parms.length - 1 ) + "}";
				    }
				    if(k === "q+" && oldStr.length >= 2){
				    	var quarter = QUARTER[o[k]];
				    	parms.push(oldStr.length > 2 ? quarter : quarter.substring(0, 3));
				    	return "{" + (parms.length - 1 ) + "}";
				    }
				    if(k === "M+" && oldStr.length >= 3){
				    	var month = MONTH[o[k]];
				    	parms.push(oldStr.length > 3 ? month : month.substring(0, 3));
				    	return "{" + (parms.length - 1 ) + "}";
				    }
				    if(k === "E+"){
				    	var week = WEEK[o[k]];
				    	parms.push(oldStr.length > 3 ? week : week.substring(0, 3));
				    	return "{" + (parms.length - 1 ) + "}";
				    }
				     if(k === "a+"){
				    	parms.push(PERIOD[o[k]]);
				    	return "{" + (parms.length - 1 ) + "}";
				    }
	            	return (RegExp.$1.length==1) ? (o[k]) : (function(){
	            		var str = o[k];
	            		for(var i = 0; i < (RegExp.$1.length - (""+o[k]).length); i++){
	            			//多余的位数用0补齐
	            			str = "0" + str;
	            		}
	            		return str;
	            	}());
	           });
	        }
        }
	    parms.forEach(function(item, index, array){
	    	fmt = fmt.replace("{" + index + "}", item);
	    });
	    return fmt;           
	}
	
	/**
	 * 根据偏移的分钟数获取偏移的小时数(私有方法)
	 */
	function getOffest(offest){
		return (offest+"").replace(/(\-|\+)?(\d+)/, function(){
    		var symbol = arguments[1] === "-" || offest === 0 ? "+" : "-";
    		var offset = parseInt(arguments[2]);
    		var hours = Math.floor(offset/60) + "";
    		var minutes = offset%60 + "";
    		return symbol + (hours.length < 2 ? "0"+hours : hours) + (minutes.length < 2 ? "0"+minutes : minutes)
    	});
	}
	
	$.date.formatToDate = function(str, fmt, timeZone) {
		if(!$.type.is(str, "String")) {console.error("formatToDate(str, fmt) str only String"); return undefined;};
		if(!$.type.getType(fmt, "Undefined") && !$.type.is(fmt, "String")) {console.error("formatToDate(str, fmt) fmt only String"); return undefined;};
		if(!$.type.getType(timeZone, "Undefined") && !$.type.is(timeZone, "String")) {console.error("formatToString(date, fmt, timeZone) timeZone only String"); return date;};
		var date = new Date();
		/*
		 	这两种方法有局限性,不利于扩展
		 	date = new Date(str);
	 		date = new Date(Date.parse(str));
 		*/
		var o = {
	    	"y+" : date.setFullYear, //年份          
		    "M+" : date.setMonth, //月份
		    "d+" : date.setDate, //日
		    "H+" : date.setHours, //小时           
		    "m+" : date.setMinutes, //分           
		    "s+" : date.setSeconds, //秒           
		    "S+" : date.setMilliseconds //毫秒           
	    };
		
		for(var k in o){
			var reg = new RegExp("("+ k +")", "g");
			var result;
			while((result = reg.exec(fmt)) != null){
				var value = str.substring(result.index, result.index + result[0].length);
				if(k === "M+"){
					if(result[1].length >= 3){
						//i,为string
				    	for(var i in MONTH){
				    		if(MONTH[i].indexOf(value) > -1){
				    			value = parseInt(i);
				    			break;
				    		}else{
				    			continue;
				    		}
				    	}
					}else{
						value = parseInt(value) - 1;
					}
			    }
				o[k].call(date, value);
			}
        }
		for(var i in TIMEZONE){
			if(timeZone !== undefined && TIMEZONE[i].code === timeZone && TIMEZONE[i].isStandard){
				timeZone_ = TIMEZONE[i];
				//如果timeZone不为空,加入时间的偏移量
				date = new Date(date.getTime() + timeZone_.offset*60*1000 - date.getTimezoneOffset()*60*1000);
				break;
			}
		}
		return date;
	}
})(jQuery);

(function($, undefined ) {
	$.string = {};
	
	$.string.toUnicode = function(str){
		if(!$.type.is(str, "String")) {console.error("toUnicode(str) str only String"); return str};
	 	var rtn = "";
	 	//\\u 必须加斜杠转义,不然会被当做Unicode处理
	 	str.split("").forEach(function(item, index, array){
	 		rtn += "\\u" + left_zero_4(parseInt(item.charCodeAt(0)).toString(16));
	 	});
	 	return rtn;
	}
	
	$.string.unicodeToString = function(str){
		if(!$.type.is(str, "String")) {console.error("unicodeToString(str) str only String"); return str};
		var rtn = "";
		rtn = str.replace(/\\u(\w{1,4})/ig, function(){
			return String.fromCharCode(parseInt(arguments[1], 16));
		});
		return rtn;
	}
	
	$.string.toAscii = function(str){
		if(!$.type.is(str, "String")) {console.error("toAscii(str) str only String"); return str};
		var value="";
		for (var i = 0; i < str.length; i++){
			value += "&#" + str.charCodeAt(i) + ";";
		}
		return value;
	}
	
	$.string.asciiToString = function(str){
		if(!$.type.is(str, "String")) {console.error("asciiToString(str) str only String"); return str};
		var rtn = "";
		rtn = str.replace(/&#(\w{1,6});/ig, function(){
			return String.fromCharCode(arguments[1]);
		});
		return rtn;
	}
	
	function left_zero_4(str) {
		if (str != null && str != '' && str != 'undefined') {
			if (str.length == 2) {
				return '00' + str;
			}
		}
		return str;
	}
})(jQuery);

(function($, undefined ) {
	$.type = {};
	
	$.type.getType =  function(object){
	    return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];
	};
	
	/*
	 *	基本类型
	 *	"Array", "Boolean", "Date", "Number", "Object", "RegExp", "String", "Window", 
	 *	"HTMLDocument", "Function", "Undefined"
	 *	如果类型为Object再做进一次的判断
	 *	type
	 */
	$.type.is = function(object, type){
		if($.type.getType(type).toUpperCase() === "String".toUpperCase()){
			if($.type.getType(object).toUpperCase() === type.toUpperCase()){
				return true;
			}
		}else{
			try{
				if(object instanceof type) return true;
			}catch(e){
				console.error(e);
			}
		}
		return false;
	}
})(jQuery);


/*
	Array.forEach implementation for IE support..  
	https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach
	兼容IE的forEach  
*/
if (!Array.prototype.forEach) {  
  Array.prototype.forEach = function(callback, thisArg) {  
      var T, k;  
      if (this == null) {  
          throw new TypeError(" this is null or not defined");  
      }  
      var O = Object(this);  
      var len = O.length >>> 0; // Hack to convert O.length to a UInt32  
      if ({}.toString.call(callback) != "[object Function]") {  
          throw new TypeError(callback + " is not a function");  
      }  
      if (thisArg) {  
          T = thisArg;  
      }  
      k = 0;  
      while (k < len) {  
          var kValue;  
          if (k in O) {  
              kValue = O[k];  
              callback.call(T, kValue, k, O);  
          }  
          k++;  
      }  
  };  
} 


两周的结果,程序猿在于积累。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值