/** * 获取距离date的dayCount天数( 年月日) * @param {*} dayCount 距离date的天数 * @param {*} date 日期 * @returns 返回 yyyy-MM-dd */ export function getDay(dayCount, date) { var today = date ? new Date(date) : new Date(); var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * dayCount; today.setTime(targetday_milliseconds); //注意,这行是关键代码 var tYear = today.getFullYear(); var tMonth = today.getMonth(); var tDate = today.getDate(); tMonth = doHandleMonth(tMonth + 1); tDate = doHandleMonth(tDate); return tYear + "-" + tMonth + "-" + tDate; } function doHandleMonth(month) { var m = month; if (month.toString().length == 1) { m = "0" + month; } return m; } // 格式化时间格式 /** * 格式化时间格式 * @param {*} template 格式化模板 * @param {*} date 格式化日期 * @returns */ export function formatTime(template, date) { var today = date ? new Date(date) : new Date(); var o = { "M+": today.getMonth() + 1, //月份 "d+": today.getDate(), //日 "h+": today.getHours(), //小时 "m+": today.getMinutes(), //分 "s+": today.getSeconds(), //秒 "q+": Math.floor((today.getMonth() + 3) / 3), //季度 "S": today.getMilliseconds() //毫秒 }; var fmt = template; if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (today.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; } /** * 数组去重 * @param {*} arr 原始数组 * @returns */ export function uniqueInArray(arr) { if (Array.hasOwnProperty('from')) { return Array.from(new Set(arr)); } else { var n = {}, r = []; for (var i = 0; i < arr.length; i++) { if (!n[arr[i]]) { n[arr[i]] = true; r.push(arr[i]); } } return r; } } /** * 计算echarts 的 max ,min ,interval * @param {*} max 最大值 * @param {*} min 最小值 * @param {*} splitNumber 分隔数 * @returns '{ max: 0, min: 0, interval: 0 }' */ export function getChartMaxMinInterval(max, min, splitNumber) { function getMaxMinNumber(n, l) { var a1 = Math.floor(Math.log(n) / Math.LN10) var b if (l) { a1 < 2 ? b = (n / Math.pow(10, a1) - parseInt(n / Math.pow(10, a1))) > 0.5 ? Math.round(n / Math.pow(10, a1)) * Math.pow(10, a1) : (parseInt(n / Math.pow(10, a1)) + 0.5) * Math.pow(10, a1) : b = Math.ceil(n / Math.pow(10, 1)) * Math.pow(10, 1) } else { a1 < 2 ? b = (n / Math.pow(10, a1) - parseInt(n / Math.pow(10, a1))) > 0.5 ? (parseInt(n / Math.pow(10, a1)) + 0.5) * Math.pow(10, a1) : Math.floor(n / Math.pow(10, a1)) * Math.pow(10, a1) : b = Math.floor(n / Math.pow(10, 1)) * Math.pow(10, 1) } return l ? -20 <= a1 ? +b.toFixed(a1 < 0 ? -a1 + 1 : 0) : b : b } var interval = 0; if ((max - min) % splitNumber != 0) { interval = getMaxMinNumber((max - min) / splitNumber, 1); max = parseFloat((parseFloat((interval * splitNumber).toFixed(12)) + min).toFixed(12)) //解决小数精度一般问题,极端问题并不能解决。 min = min } else { interval = (max - min) / splitNumber; min = min max = max } return { max: max, min: min, interval: interval } } /** * 保留几位小数 * @param {*} val 要保留小数的值 * @param {*} n 保留的小数位数 * @returns */ export function getToFixed(val, n) { let temp = parseFloat(val); n = n ? n : 0 if (typeof temp == NaN) { console.warn("传入的为非数字类型"); return NaN } temp = parseFloat(temp.toFixed(n)) return temp } /** * 根据扬程算流量 * @param {*} curve 贝塞尔曲线 * @param {*} y 扬程 * @returns '{x: 0,y: 0,}' */ export function getSectPointFlowbyH(curve, y) { if (curve == null) return null var iPtCount = curve.length if (y > curve[0].Point0.Y) { return null } if (y < curve[iPtCount - 1].Point3.Y) { return null } for (var i = 0; i < iPtCount; i++) { if (y > curve[i].Point3.Y && y < curve[i].Point0.Y) { var ptBizer = curve[i] // try { var minDis = Math.abs(ptBizer.Point3.Y - ptBizer.Point0.Y) var sectY = 0 var sectX = 0 //console.log(minDis) for (var uu = 0; uu <= 1; uu = uu + 0.01) { var y0 = ptBizer.Point0.Y * uu * uu * uu var y1 = 3 * ptBizer.Point1.Y * uu * uu * (1 - uu) var y2 = 3 * ptBizer.Point2.Y * uu * (1 - uu) * (1 - uu) var y3 = ptBizer.Point3.Y * (1 - uu) * (1 - uu) * (1 - uu) var curveY = y0 + y1 + y2 + y3 //console.log(curveY) if (Math.abs(curveY - y) < minDis) { var y0 = ptBizer.Point0.Y * uu * uu * uu var y1 = 3 * ptBizer.Point1.Y * uu * uu * (1 - uu) var y2 = 3 * ptBizer.Point2.Y * uu * (1 - uu) * (1 - uu) var y3 = ptBizer.Point3.Y * (1 - uu) * (1 - uu) * (1 - uu) var x0 = ptBizer.Point0.X * uu * uu * uu var x1 = 3 * ptBizer.Point1.X * uu * uu * (1 - uu) var x2 = 3 * ptBizer.Point2.X * uu * (1 - uu) * (1 - uu) var x3 = ptBizer.Point3.X * (1 - uu) * (1 - uu) * (1 - uu) minDis = Math.abs(curveY - y) sectX = x0 + x1 + x2 + x3 sectY = curveY } } return { x: sectX, y: sectY, } } catch (ex) { alert(ex.message) } } } } /** * 根据流量算扬程 * @param {*} curve 贝塞尔曲线 * @param {*} x 流量 * @returns '{x: 0,y: 0,}' */ export function getSectPointHbyFlow(curve, x) { if (curve == null) return null var iPtCount = curve.length if (x < curve[0].Point0.X) { return null } if (x > curve[iPtCount - 1].Point3.X) { return null } for (var i = 0; i < iPtCount; i++) { if (x > curve[i].Point0.X && x < curve[i].Point3.X) { var ptBizer = curve[i] // try { //alert(i); var minDis = Math.abs(ptBizer.Point3.X - ptBizer.Point0.X) //alert(x + " " + curve[i].Point0.X + " " + curve[i].Point3.X); var sectY = 0 var sectX = 0 for (var uu = 0; uu <= 1; uu = uu + 0.01) { var x0 = ptBizer.Point0.X * uu * uu * uu var x1 = 3 * ptBizer.Point1.X * uu * uu * (1 - uu) var x2 = 3 * ptBizer.Point2.X * uu * (1 - uu) * (1 - uu) var x3 = ptBizer.Point3.X * (1 - uu) * (1 - uu) * (1 - uu) var curveX = x0 + x1 + x2 + x3 if (Math.abs(curveX - x) < minDis) { var y0 = ptBizer.Point0.Y * uu * uu * uu var y1 = 3 * ptBizer.Point1.Y * uu * uu * (1 - uu) var y2 = 3 * ptBizer.Point2.Y * uu * (1 - uu) * (1 - uu) var y3 = ptBizer.Point3.Y * (1 - uu) * (1 - uu) * (1 - uu) minDis = Math.abs(curveX - x) sectY = y0 + y1 + y2 + y3 sectX = curveX } } return { x: sectX, y: sectY, } } catch (ex) { alert(ex.message) } } } } /** * 转成Bezier曲线模型 * @param {*} pixelPoints * @returns */ export function transBezierCurveModel(pixelPoints) { if (pixelPoints == null || pixelPoints.length < 4) return null //console.log(pixelPoints); var iPointCout = pixelPoints.length var a = 0.09 var b = 0.09 var controlPoint = [] for (var i = 0; i < iPointCout - 1; i++) { var bezier = {} bezier.Point0 = { X: pixelPoints[i][0], Y: pixelPoints[i][1] } if (i == 0) { var x1 = pixelPoints[i][0] + a * (pixelPoints[i + 1][0] - pixelPoints[i][0]) var y1 = pixelPoints[i][1] + a * (pixelPoints[i + 1][1] - pixelPoints[i][1]) bezier.Point1 = { X: x1, Y: y1, } } else { var x1 = pixelPoints[i][0] + a * (pixelPoints[i + 1][0] - pixelPoints[i - 1][0]) var y1 = pixelPoints[i][1] + a * (pixelPoints[i + 1][1] - pixelPoints[i - 1][1]) bezier.Point1 = { X: x1, Y: y1, } } if (i == iPointCout - 2) { var x2 = pixelPoints[i + 1][0] - b * (pixelPoints[i + 1][0] - pixelPoints[i][0]) var y2 = pixelPoints[i + 1][1] - b * (pixelPoints[i + 1][1] - pixelPoints[i][1]) bezier.Point2 = { X: x2, Y: y2, } } else { var x2 = pixelPoints[i + 1][0] - b * (pixelPoints[i + 2][0] - pixelPoints[i][0]) var y2 = pixelPoints[i + 1][1] - b * (pixelPoints[i + 2][1] - pixelPoints[i][1]) bezier.Point2 = { X: x2, Y: y2, } } bezier.Point3 = { X: pixelPoints[i + 1][0], Y: pixelPoints[i + 1][1] } //bezier.Point3 = pixelPoints[i + 1]; controlPoint.push(bezier) } //console.log(controlPoint); return controlPoint } /** * 格式化值,根据值的大小选择保留几位小数 * @param {*} value * @returns */ export function numberFormat4RecordValue(value) { if (value == null || value == undefined) return 0; value = parseFloat(value) if (value > 100) return parseFloat(value.toFixed(1)); else if (value > 10) return parseFloat(value.toFixed(2)); else return parseFloat(value.toFixed(4)); }