/**
* 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++;
}
};
}
两周的结果,程序猿在于积累。