zmc
2023-11-23 c02c01c9cf6a2639a076943c01bf37ea345bf8e1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/* 时间函数 */
 
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
  }
}