(function(){ "use strict"; /** * 1.封装时间处理,包含时间转化,时间格式化,时间加减,时间求差 * 2.封装数值处理,包含数值格式化,数值精准计算 */ /**时间拓展----开始*/ function numToMonth(m,flag){ function numToStr(i){ switch (i) { case 1:return "一"; case 2:return "二"; case 3:return "三"; case 4:return "四"; case 5:return "五"; case 6:return "六"; case 7:return "七"; case 8:return "八"; case 9:return "九"; case 10:return "十"; case 11:return "十一"; case 12:return "十二"; } return "NaN"; } if(flag){ return numToStr(m)+"月"; }else{ return m+"月"; } } function numToWeek(w,flag){ function numToStr(i){ switch (i) { case 0:return "日"; case 1:return "一"; case 2:return "二"; case 3:return "三"; case 4:return "四"; case 5:return "五"; case 6:return "六"; } return "NaN"; } var r = numToStr(w); if(flag == 1){ r = "星期"+r; }else if(flag == 2){ r = "周"+r; } return r; } function numToQuarter(m,flag){ if(m>9){ return flag?"四季度":"Q4"; }else if(m>6){ return flag?"三季度":"Q3"; }else if(m>3){ return flag?"二季度":"Q2"; }else{ return flag?"一季度":"Q1"; } } function numToHealthyYear(m){ return m>6?"下半年":"上半年"; } var dateUtils = { formatDate:function(date,format){ if(!date || !(date instanceof Date)){ return ""; } if(!format){ format = "yyyy-MM-dd HH:mm:ss"; } var yyyy = date.getFullYear(); var data = { y:yyyy - parseInt(yyyy/100)*100, M:date.getMonth()+1, d:date.getDate(), H:date.getHours(), h:date.getHours()>12?(date.getHours()-12):date.getHours(), m:date.getMinutes(), s:date.getSeconds(), f:date.getMilliseconds() }; var sfs = ["y","M","d","H","h","m","s","f"]; for(var i=0;i=12?"下午":"上午"; data.t = data.H>=12?"PM":"AM"; data.Q=numToQuarter(data.M,true); data.q=numToQuarter(data.M); data.hy=numToHealthyYear(data.M); var fields = ["yyyy","yy","hy","y","Q","q","MMMM","MMM","MM","M","ddddd","dddd","ddd","dd","d","HH","H","hh","h","mm","m","ss","s","fff","ff","f","tt","t"]; for(var i=0;i=d2.getTime()){ max = d1; min = d2; }else{ max = d2; min = d1; } var cha = callback(max,min); return {max:max,min:min,cha:cha}; } /**比较日期+小时+分钟+秒+毫秒的大小*/ function isMax(d1,d2) { var max,min; if(d1.getTime()>=d2.getTime()){ max = d1; min = d2; }else{ max = d2; min = d1; } var xms= max.getDate()*24*60*60*1000+max.getHours()*60*60*1000+max.getMinutes()*60*1000+max.getSeconds()*1000+max.getMilliseconds(); var tms= min.getDate()*24*60*60*1000+min.getHours()*60*60*1000+min.getMinutes()*60*1000+min.getSeconds()*1000+min.getMilliseconds(); return xms>=tms; } for(var i=0;i options.min.getMonth()){ return options.cha; } if(options.max.getMonth()0) { nums -= 1; str += "0" } return str; } function fillZeroPosition(value, fixedNums, isRightFill) { value = value + ""; fixedNums = typeof fixedNums == "number" ? fixedNums : 2; var fillNums = fixedNums - value.length; if (fillNums > 0) { var str = joinZeroStr(fillNums); return isRightFill? value + str : str + value; } return value; } function getFormatValue(value, format, formatMap) { var regExp = /[^0#]/g; value = Math.abs(value); var hasDh = format.indexOf(",") != -1; var formatSplit = format.split("."); var integralFormat = (formatSplit[0] || "").replace(regExp, ""); var fractionalFormat = (formatSplit[1] || "").replace(regExp, ""); var formatValue = ""; var decimalsSeparator = formatMap.decimalsSeparator; var groupSeparator = formatMap.groupSeparator; var hasZero = integralFormat.indexOf("0"); integralFormat = hasZero == -1 ? "0" : (integralFormat.substr(hasZero) || "0"); var fractionalLength = fractionalFormat.length; var fillZreoLenth = fractionalFormat.substr(0, fractionalFormat.lastIndexOf("0") + 1).length; function numRound(number, fractionDigits) { return Math.round(number * Math.pow(10, fractionDigits))/Math.pow(10, fractionDigits); } value = numRound(value, fractionalLength); var valueSz = String(value).split("."); var integralValue = valueSz[0]; var fractionalValue = valueSz[1] || ""; if (integralValue) { integralValue = fillZeroPosition(integralValue, integralFormat.length); if (hasDh) { for(var i = 0; i < Math.floor((integralValue.length - (1 + i)) / 3); i++){ integralValue = integralValue.substring(0, integralValue.length - (4 * i + 3)) + groupSeparator + integralValue.substring(integralValue.length - (4 * i + 3)); } } formatValue += integralValue } if (fractionalLength > 0) { fractionalValue = fillZeroPosition(fractionalValue.substr(0, fractionalLength), fillZreoLenth, true); if (fractionalValue !== "") { formatValue += decimalsSeparator; formatValue += fractionalValue; } } return formatValue; } function getFormatIndex(format) { if (!format) { return null; } function getZeroIndexs(format) { var zeroIndex = format.indexOf("0"); var hashIndex = format.indexOf("#"); if (zeroIndex == -1 || (hashIndex != -1 && hashIndex < zeroIndex)) { zeroIndex = hashIndex; } var lastZeroIndex = format.lastIndexOf("0"); var lastHashIndex = format.lastIndexOf("#"); if (lastZeroIndex == -1 || (lastHashIndex != -1 && lastHashIndex > lastZeroIndex)) { lastZeroIndex = lastHashIndex; } return [zeroIndex, lastZeroIndex]; } var zeroIndexs = getZeroIndexs(format); var zeroIndex = zeroIndexs[0]; var lastZeroIndex = zeroIndexs[1]; return zeroIndex > -1 ? {begin: zeroIndex, end: lastZeroIndex, format: format.substring(zeroIndex, lastZeroIndex + 1)} : null } function hasZeroOrHash(value) { return value.indexOf("0") != -1 || value.indexOf("#") != -1; } function getCommonFormat(format, number, formatMap, formatSz) { var ncpReg = /^(n|c|p)(\d*)$/i; var formatAttrs = formatMap.number; var ncpRes = ncpReg.exec(format); if (ncpRes != null) { var ncpValue = ncpRes[1]; var ncpCount = ncpRes[2]; if (ncpValue == "p") { formatAttrs = formatMap.percent; } else if (ncpValue == "c") { formatAttrs = formatMap.currency; } var pointCount = ncpCount ? parseInt(ncpCount) : formatAttrs.decimals; var plusMinusFormat = formatAttrs.pattern[number < 0 ? 1 : 0]; plusMinusFormat = plusMinusFormat.replace("n", "#,#" + (pointCount > 0 ? "." + joinZeroStr(pointCount) : "")); format = format.replace(ncpValue + ncpCount, plusMinusFormat).replace("$", formatMap.currency.symbol).replace("%", formatMap.percent.symbol); } else if (hasZeroOrHash(format)){ if (number < 0 && !formatSz[1]) { format = "-" + format; } } return format; } var indexNumberReg = /^(e)(\d*)$/i; if (typeof number != "number") { return ""; } if (!format) { return String(number); } var formatSz = format.split(";"); format = formatSz[0]; if (number < 0 && formatSz.length >= 2) { format = formatSz[1]; } if (number == 0 && formatSz.length >= 3) { format = formatSz[2]; } var formatMap = {"number":{"pattern":["n","-n"],"decimals":2,"decimalsSeparator":".","groupSeparator":",","groupSize":[3]},"percent":{"pattern":["n%","-n%"],"decimals":2,"decimalsSeparator":".","groupSeparator":",","groupSize":[3],"symbol":"%"},"currency":{"pattern":["$n","$-n"],"decimals":2,"decimalsSeparator":".","groupSeparator":",","groupSize":[3],"symbol":"¥"}}; var numberFormat = formatMap.number; var percentFormat = formatMap.percent; var currencyFormat = formatMap.currency; var commonFormat = getCommonFormat(format, number, formatMap, formatSz); var hasCurrencySymbol = commonFormat.indexOf(currencyFormat.symbol) != -1; var hasPercentSymbol = commonFormat.indexOf(percentFormat.symbol) != -1; var hasZeroHash = hasZeroOrHash(commonFormat); var realFormat = hasCurrencySymbol ? currencyFormat : (hasPercentSymbol ? currencyFormat : numberFormat); var formatNumber = hasPercentSymbol ? number * 100 : number; var indexNumberRes = indexNumberReg.exec(commonFormat); if (indexNumberRes) { var indexCount = parseInt(indexNumberRes[2]); return isNaN(indexCount) ? formatNumber.toExponential() : formatNumber.toExponential(indexCount); } if (!hasZeroHash) { return commonFormat; } var formatValue = ""; var formatIndex = getFormatIndex(commonFormat); if (formatIndex != null) { formatValue = getFormatValue(formatNumber, formatIndex.format, realFormat); formatValue = commonFormat.substr(0, formatIndex.begin) + formatValue + commonFormat.substr(formatIndex.end + 1); } else { formatValue = commonFormat; } return formatValue; } }; Number.prototype.format = function(format){ return numberUtils.formatNumber(this,format); }; /**数值拓展----结束*/ /**精准计算拓展---开始*/ var numberMethods = ["floor","round","ceil"]; for(var i=0;i16){ maxJd = 16; } type = type || "round"; if(type != "floor" && type != "round" && type != "ceil"){ console.warn(type+" is not a number,will be reset to 'round'"); type = "round"; } function getAssist(v){ var str = String(v); var eindex = str.indexOf("e"); var addres = 0; if(eindex != -1){ addres = str.substring(eindex+1)*-1; str = str.substring(0,eindex); } var index = str.indexOf("."); var res = index != -1?str.length - index -1:0; res = res+addres; if(res>maxJd){ res = maxJd; } if(res<0){ res = 0; } var pow = Math.pow(10,res); var num = v[type](res); return {pow:pow,num:num}; } var a = getAssist(this); var b = getAssist(x); var max = a.pow>b.pow?a.pow:b.pow; var jg = NaN; if(f=="add"){ jg = (a.num*max+b.num*max)/max; }else if(f=="subtract"){ jg = (a.num*max-b.num*max)/max; }else if(f=="multiply"){ jg = (a.num*a.pow)*(b.num*b.pow)/(a.pow*b.pow); }else if(f=="divide"){ jg = (a.num*max)/(b.num*max); } return jg; } })(field); } /**精准计算拓展---结束*/ })();