/* 时间函数 */
|
|
import dayjs from 'dayjs'
|
import lineChart from '@/utils/chartFunction/lineChart.js'
|
export default {
|
// 判断已选的月份是否大于当前月份
|
judgeDateValid(date) {
|
// 获得当月月份
|
let currentMonth = dayjs()
|
let selectMonth = date.getTime()
|
// 选择大于现在月份
|
if (selectMonth > currentMonth) {
|
return true
|
}
|
|
return false
|
},
|
|
/**
|
* 判断两个日期是否相差指定的分钟数
|
* @param:
|
* @returns:
|
*/
|
isTimeOverFifty(time1, time2, minutes = 15) {
|
let t1 = dayjs(time1)
|
let t2 = dayjs(time2)
|
|
let timeDifferce = Math.abs(t1.diff(t2, 'minute'))
|
if (timeDifferce <= minutes) {
|
return false
|
}
|
return true
|
},
|
|
/**
|
* 根据指定的分钟间隔,划分起始时间
|
* @param:开始时间 结束时间 间隔分钟数
|
* @returns:
|
*/
|
ascTime(beginTime, endTime, intervalMinute = 15) {
|
if (beginTime >= endTime) {
|
return []
|
}
|
|
let time = []
|
time.push(beginTime)
|
let bt = dayjs(beginTime).add(intervalMinute, 'minute')
|
let et = dayjs(endTime)
|
|
while (bt < et) {
|
time.push(bt.format('YYYY-MM-DD HH:mm:ss'))
|
bt = dayjs(bt).add(intervalMinute, 'minute')
|
}
|
return time
|
},
|
|
/**
|
* 返回flag不等于N的时间点和数据缺失的时间点
|
* @param:扬尘数据,升序的时间字符串数组(接口中返回的已经是升序)
|
* @returns:升序的时间点
|
*/
|
invalidTime(dustData, timeArr) {
|
// 参数为空则退出
|
if (!dustData.length || !timeArr.length) {
|
return []
|
}
|
|
let time = []
|
timeArr.forEach((item) => {
|
let r = lineChart.findDate(dustData, item)
|
// 没有找到对应时间的数据
|
if (r == false) {
|
// 将该时间加入数组
|
time.push(item)
|
}
|
|
// 找到对应时间的数据,并且该数据标识不等与‘N’
|
if (r && r.flag != 'N') {
|
// 将该数据的采集时间加入数组
|
time.push(r.lst)
|
}
|
})
|
|
return time
|
},
|
|
/**
|
* 取指定间隔的时间为连续时间,放在数组中。 孤立的时间点与自身算一个连续
|
* 目的是构造有效率缺失的颜色背景区间
|
* @param:时间字符串数组
|
* @returns:[ ['2023-11-02 00:00:00','2023-11-02 00:15:00','2023-11-02 00:30:00']]
|
*/
|
seriesTime(timeArr, intervalMinute = 15) {
|
let temp = []
|
let temp_1 = []
|
for (let i = 0; i < timeArr.length; i++) {
|
// 当前时间
|
let currentTime = timeArr[i]
|
if (i === 0) {
|
temp_1.push(currentTime)
|
continue
|
}
|
// 前一个
|
let pre = timeArr[i - 1]
|
|
// 超过15分钟
|
if (this.isTimeOverFifty(pre, currentTime, intervalMinute)) {
|
// 列表为连续时长为自身
|
temp.push(temp_1)
|
temp_1 = [currentTime]
|
}
|
// 不超过15分钟
|
else {
|
temp_1.push(currentTime)
|
}
|
}
|
|
if (temp_1.length > 0) {
|
temp.push(temp_1)
|
}
|
|
// 整理数据
|
let temp_2 = []
|
for (let i = 0; i < temp.length; i++) {
|
if (temp[i].length == 1) {
|
temp_2.push([temp[i][0], temp[i][0]])
|
} else if (temp[i].length > 1) {
|
temp_2.push([temp[i][0], temp[i][temp[i].length - 1]])
|
}
|
}
|
|
return temp_2
|
},
|
|
splitTime(timeArr) {
|
let result = []
|
for (let i = 0; i < timeArr.length; i++) {
|
let temp = []
|
for (let j = 0; j < timeArr[i].length; j++) {
|
temp.push(timeArr[i][j].slice(11, -3))
|
}
|
result.push(temp)
|
}
|
return result
|
},
|
|
/**
|
* 找到在给定的开始时间bt和结束时间et之间缺失的时间区间
|
* @param:开始时间,结束时间,在这个时间范围内已有的时间(时间字符串数组)
|
* @returns:
|
*/
|
getMissingDays(bt, et, timeArr) {
|
// 存储缺失的时间区间
|
const r = []
|
const begin = dayjs(bt)
|
const end = dayjs(et)
|
// 开始时间
|
let current = begin
|
|
for (const time of timeArr) {
|
const currentTime = dayjs(time)
|
if (currentTime.isBefore(current)) {
|
continue
|
}
|
|
if (currentTime.isAfter(current)) {
|
r.push([current.format('YYYY-MM-DD'), currentTime.format('YYYY-MM-DD')])
|
}
|
|
current = currentTime.add(1, 'day')
|
}
|
|
if (end.isAfter(current)) {
|
r.push([current.format('YYYY-MM-DD'), end.format('YYYY-MM-DD')])
|
}
|
|
return r
|
}
|
}
|