/*** * 扩展String对象 */ ;(function(){ String.is = function(obj){ return Object.prototype.toString.call(obj) == "[object String]"; } String.prototype.startWith = function(str){ if(str==undefined) return false; if(str.length > this.length) return false; for (let i = 0; i < str.length; i++) { if(str.charCodeAt(i)!=this.charCodeAt(i)){ return false; } } return true; } String.prototype.endWith = function(str){ if(str==undefined) return false; if(str.length > this.length) return false; var j = this.length - str.length; for (let i = 0; i < str.length; i++) { if(str.charCodeAt(i)!=this.charCodeAt(i+j)){ return false; } } return true; } })(); /** * 扩展Number对象 */ ;(function(){ Number.is = function(obj){ return Object.prototype.toString.call(obj) == "[object Number]"; } Number.format = function(num,fmt){ const sign = num < 0 ? '-' : ''; const absNum = Math.abs(num); var fmts = fmt.split("."); var format = { int:fmts[0].split("").reverse(), scale:fmts[1]!=undefined?fmts[1].split(""):undefined } var numsp = (absNum+"").split("."); var numinfo = { int:numsp[0].split("").reverse(), scale:numsp[1]!=undefined?numsp[1].split(""):undefined } var res = { int:[], scale:undefined } var ni = 0; for (var i = 0; i < format.int.length; i++) { var item = format.int[i]; if(item=="#" && ni < numinfo.int.length){ res.int.push(numinfo.int[ni]); ni++; }else if(item=="0"){ if(ni < numinfo.int.length){ res.int.push(numinfo.int[ni]); ni++; }else{ res.int.push(item); } }else if(item==","){ if(ni < numinfo.int.length){ if(ni==numinfo.int.length-1 && numinfo.int[ni]=="-"){ continue; } res.int.push(","); }else{ continue; } }else if(item!="#"){ res.int.push(item); } } if(format.scale!=undefined){ res.scale = []; for (var j = 0; j < format.scale.length; j++) { var item = format.scale[j]; if((item=="0" || item=="#") && numinfo.scale!=undefined && j < numinfo.scale.length){ res.scale.push(numinfo.scale[j]); }else if(item!="#"){ res.scale.push(item); } } var numL = 0; for (var k = 0; k < res.scale.length; k++) { var item = res.scale[k]; if(/\b/.test(item)){ numL++; } } if(numinfo.scale!=undefined && numinfo.scale.length > numL){ var nz = res.scale[numL-1]; res.scale[numL-1] = parseInt(numinfo.scale[numL])>=5?parseInt(nz)+1:nz; } } var reStr = ""; reStr += res.int.reverse().join(""); if(res.scale!=undefined){ reStr+= "."; reStr+= res.scale.join(""); } //return reStr.replace("-,", "-"); return sign+reStr; } // Number.prototype.format = function(fmt){ // if(fmt==undefined) throw new Error("参数格式化表达式不能为空!"); // return Number.format(this,fmt); // } Number.parse = function(str){ if(str==undefined || Number.is(str)) return str; str += ""; if(/^-?\d+[\.\d]*$/.test(str)){ return new Number(str); } var sps = str.split(""); var res = []; for (var i = 0; i < sps.length; i++) { var item = sps[i]; if(item=="-" || item=="." || /[0-9]/.test(item)){ res.push(item); } } return new Number(res.join("")); } })(); /** * 扩展日期对象 */ ;(function(){ Date.SECOND = { MINUTES:60000, HOURS:3600000, DAY:86400000, WEEK:604800000, } Date.Dictionary = { Holiday:{ "0101":"元旦", "0214":"情人节", "0308":"妇女节", "0312":"植树节", "0315":"消费者权益日", "0401":"愚人节", "0501":"劳动节", "0504":"青年节", "0512":"护士节", "0601":"儿童节", "0701":"建党节", "0801":"建军节", "0910":"教师节", "0928":"孔子诞辰", "1001":"国庆节", "1006":"老人节", "1024":"联合国日", "1224":"平安夜", "1225":"圣诞节", }, LunarHoliday:{ "0101":"春节", "0115":"元宵节", "0505":"端午节", "0707":"七夕情人节", "0715":"中元节", "0815":"中秋节", "0909":"重阳节", "1208":"腊八节", "1224":"小年" }, Week:{ "0" : "日", "1" : "一", "2" : "二", "3" : "三", "4" : "四", "5" : "五", "6" : "六" }, timeDistance:{ yesterday:"昨天", daysAgo:"{0}天前", hoursAgo:"{0}小时前", minutesAgo:"{0}分钟前", justNow:"刚刚" } } Date.is = function(obj){ return Object.prototype.toString.call(obj) == "[object Date]"; } Date.valueOf = function(val,fmt){ if(val == undefined) return; if(Date.is(val)){ return val; } if(String.is(val)){ if (/^\d+$/.test(val)) { return new Date(parseInt(val)); }else if(fmt!=undefined){ var fmts = fmt.split(""); var conf = { y:{start:undefined,end:undefined}, M:{start:undefined,end:undefined}, d:{start:undefined,end:undefined}, H:{start:undefined,end:undefined}, h:{start:undefined,end:undefined}, m:{start:undefined,end:undefined}, s:{start:undefined,end:undefined}, }; for (var i = 0; i < fmts.length; i++) { var item = conf[fmts[i]]; if(item!=undefined){ if(item.start==undefined){ item.start = i; }else{ item.end = i; } } } var keys = Object.keys(conf); var parse = {}; for (var j = 0; j < keys.length; j++) { var key = keys[j]; if(conf[key].start!=undefined && conf[key].end!=undefined){ parse[key] = parseInt(val.substr(conf[key].start,conf[key].end+1)); } } return new Date(parse.y||1975,(parse.M||1)-1,parse.d||1,parse.H||parse.h||0,parse.m||0,parse.s||0); }else{ return new Date(val.replace(/-/g, "/")); } }else if(Number.is(val)){ return new Date(val); } return undefined; } Date.prototype.format = function(fmt){ fmt = fmt || "yyyy-MM-dd HH:mm:ss"; var o = { "M+" : this.getMonth()+1, //月份 "d+" : this.getDate(), //日 "h+" : this.getHours()%12 == 0 ? 12 : this.getHours()%12, //小时 "H+" : this.getHours(), //小时 "m+" : this.getMinutes(), //分 "s+" : this.getSeconds(), //秒 "q+" : Math.floor((this.getMonth()+3)/3), //季度 "S" : this.getMilliseconds() //毫秒 }; if(/(y+)/.test(fmt)){ fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); } for(var k in o){ if(new RegExp("("+ k +")").test(fmt)){ fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length))); } } return fmt; } Date.prototype.toString = function(){ return this.format(); } Date.prototype.getMonthInfo = function(){ return { first:new Date(this.getFullYear(),this.getMonth(),1), last:new Date(this.getFullYear(),this.getMonth()+1,0), month:this.getMonth(), name:this.format("yyyy-MM"), monthIndex:this.getMonthIndex() } } Date.prototype.getMonthIndex = function(){ return parseInt(this.format("yyyyMM")); } Date.prototype.getYearInfo = function(){ return { first:new Date(this.getFullYear(),0,1), last:new Date(this.getFullYear(),12,0), name:this.format("yyyy") } } Date.prototype.getWeekOpt = function(){ var yearFirst = new Date(this.getFullYear(),0,1); var d = Math.round((this.valueOf() - yearFirst.valueOf()) / Date.SECOND.DAY); return { first:new Date(this.getTime() - this.getDay()* Date.SECOND.DAY), last:new Date(this.getTime() + (7 - this.getDay())* Date.SECOND.DAY), monthIndex:Math.ceil((this.getDate() + 6 - this.getDay()) / 7), yearIndex:Math.ceil((d + ((yearFirst.getDay() + 1) - 1)) / 7), name:this.format("EE"), fullName:this.format("yyyy-MM EE") } } Date.prototype.copy = function(){ return new Date(this.getFullYear(),this.getMonth(),this.getDate(),this.getHours(),this.getMinutes(),this.getSeconds()); } Date.prototype.getDayIndex = function(){ var yearFirst = new Date(this.getFullYear(),0,1); return parseInt((this.valueOf() - yearFirst.valueOf())/Date.SECOND.DAY)+1 } Date.prototype.getDayName = function(){ return this.format("yyyy-MM-dd"); } Date.prototype.next = function(){ if(arguments.length==0){ return new Date(this.getTime()+Date.SECOND.DAY); } if(arguments.length > 0){ var type = arguments[0]; if(Object.prototype.toString.call(type) == "[object Number]" || (Object.prototype.toString.call(type) == "[object String]" && /^-?\d+$/.test(type))){ return new Date(this.getTime()+Date.SECOND.DAY*parseInt(type)); } var step = parseInt(arguments[1]) || 1; var res = undefined; switch (type) { case "y": res = new Date(this.getTime()); res.setFullYear(this.getFullYear()+step); break; case "M": res = new Date(this.getTime()); res.setDate(1); var y = step%12; res.setFullYear(this.getFullYear()+parseInt(step/12)); var month = res.getMonth()+y; if(month>11){ res.setFullYear(res.getFullYear()+1); res.setMonth(month-12); }else if(month < 0){ res.setFullYear(res.getFullYear()-1); res.setMonth(month+12); }else{ res.setMonth(month); } var conf = res.getMonthInfo(); if(this.getDate() < conf.last.getDate()){ res.setDate(this.getDate()); }else{ res.setDate(conf.last.getDate()); } break; case "w": res = new Date(this.getTime()+Date.SECOND.WEEK*step); break; case "d": res = new Date(this.getTime()+Date.SECOND.DAY*step); break; case "H": res = new Date(this.getTime()+Date.SECOND.HOURS*step); break; case "m": res = new Date(this.getTime()+Date.SECOND.MINUTES*step); break; case "s": res = new Date(this.getTime()+1000*step); break; default: res = new Date(this.getTime()+Date.SECOND.DAY*step); break; } return res; } } })();