import dayjs from 'dayjs' export default { /** * description:返回时间数组,间隔15分钟。 * @param: 异常的开始,异常结束时间 * @createTime:2023-08-17 * @returns:比如12:00:00-13:00:00 所以返回的数组元素是 12:00:00 ,12:15:00,12:30:00,12:45:00,13:00:00 */ descFiftyTime(begin, end) { let time = []; if (begin == end) { time.push(begin); return time; } time.push(begin); let temp = dayjs(begin).add(15, 'minute').format('YYYY-MM-DD HH:mm:ss'); while (temp != end) { time.push(temp); temp = dayjs(temp).add(15, 'minute').format('YYYY-MM-DD HH:mm:ss'); } // 加上异常的结束时间 time.push(temp); return time; }, /** * description:返回开始时间的前45分钟的时间点,结束时间后45分钟的时间点 * @param: 异常的开始时间,异常的结束时间。 * @returns:数组。time[0],time[1],time[2],time[3]分别代表异常区间前45分钟的时间点,前15分钟的时间点,后15分钟的时间点,后45分钟的时间点 */ before45AndAfter45(begin, end) { let time = []; // 前一段的开始时间 const before45MinBegin = dayjs(begin) .subtract(45, 'minute') .format('YYYY-MM-DD HH:mm:ss'); // 前一段的结束时间 const before15MinBegin = dayjs(begin) .subtract(15, 'minute') .format('YYYY-MM-DD HH:mm:ss'); // 后一段的开始时间 const after15MinBegin = dayjs(end) .add(15, 'minute') .format('YYYY-MM-DD HH:mm:ss'); // 往后40分钟 const after45MinEnd = dayjs(end) .add(45, 'minute') .format('YYYY-MM-DD HH:mm:ss'); time.push(before45MinBegin); time.push(before15MinBegin); time.push(after15MinBegin); time.push(after45MinEnd); return time; }, /** * description:返回某站点在该时段历史数据的get请求参数 * @param: 站点名称, 开始时间, 结束时间 * @returns:对象 */ requestGetParms(name, begin, end) { return { siteName: name, beginTime: begin, endTime: end }; }, /** * description:相差多少个15分钟 计算中包括开始时间,结束时间。 * @param: 异常开始时间,异常结束时间 * @returns:整数 */ diffFiftyMinutesNum(beginNormal, endNormal) { // 将开始时间和结束时间转换为dayjs对象 const start = dayjs(beginNormal).subtract(15, 'minute'); const end = dayjs(endNormal); // 计算结束时间减去开始时间中间相差多少个十分钟 const diffInMinutes = end.diff(start, 'minute'); const diffInTenMinutes = Math.floor(diffInMinutes / 15); return diffInTenMinutes; }, /** * description:判断data中是否有该日期时间,存在返回该时间对应的浓度值,否则返回-1 * @param: 加上前后区间的异常数据,时间字符串 * @returns: */ findTimeInExceptionData(data, time) { for (let i = 0; i < data.length; i++) { if (data[i] == null) { continue; } if (data[i]['lst'] == time) { return data[i]['dustValue']; } } return -1; }, /** * description:根据开始和结束时间,返回以15分钟为间隔的时间和对应的值 * @param: 前区间的开始时间, 后区间的结束时间, 加上前后区间的总时间段的异常数据的对象数组 * @returns:对象。包含了折线图的x轴,y轴的配置数据 */ keepContinuousByEachFiftyMinutes( intervalStarTime, intervalEndTime, headAndTailExceptionData ) { let xAxis = []; let yAxis = []; let obj = {}; let current = intervalStarTime; let tail = dayjs(intervalEndTime) .add(15, 'minute') .format('YYYY-MM-DD HH:mm:ss'); while (current != tail) { let value = this.findTimeInExceptionData( headAndTailExceptionData, current ); if (value != -1) { xAxis.push(current); yAxis.push(value); } else { xAxis.push(current); yAxis.push(null); } current = dayjs(current) .add(15, 'minute') .format('YYYY-MM-DD HH:mm:ss'); } obj['xAxis'] = xAxis; obj['yAxis'] = yAxis; return obj; }, }