From d1ccf7e1835b3c583da16d90a286e749d5e27c84 Mon Sep 17 00:00:00 2001
From: zmc <zmc_li@foxmail.com>
Date: 星期四, 07 十二月 2023 14:15:20 +0800
Subject: [PATCH] 修改无数据时段的算法

---
 src/utils/time.js |  186 +++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 173 insertions(+), 13 deletions(-)

diff --git a/src/utils/time.js b/src/utils/time.js
index ec7eeb8..738e1d9 100644
--- a/src/utils/time.js
+++ b/src/utils/time.js
@@ -1,19 +1,179 @@
+/* 鏃堕棿鍑芥暟 */
 
 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
+    }
 
-      
-        // 鍒ゆ柇宸查�夌殑鏈堜唤鏄惁澶т簬褰撳墠鏈堜唤
-        judgeDateValid(date){
-          // 鑾峰緱褰撴湀鏈堜唤
-          let currentMonth = dayjs()
-          let selectMonth = date.getTime()
-          // 閫夋嫨澶т簬鐜板湪鏈堜唤
-          if(selectMonth > currentMonth){
-            return true
-          }
+    return false
+  },
 
-          return false
-        }
+  /**
+   * 鍒ゆ柇涓や釜鏃ユ湡鏄惁鐩稿樊鎸囧畾鐨勫垎閽熸暟
+   * @param锛�
+   * @returns锛�
+   */
+  isTimeOverFifty(time1, time2, minutes = 15) {
+    let t1 = dayjs(time1)
+    let t2 = dayjs(time2)
 
-}
\ No newline at end of file
+    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涓嶇瓑浜嶯鐨勬椂闂寸偣鍜屾暟鎹己澶辩殑鏃堕棿鐐�
+   * @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)
+      }
+
+      // 鎵惧埌瀵瑰簲鏃堕棿鐨勬暟鎹紝骞朵笖璇ユ暟鎹爣璇嗕笉绛変笌鈥楴鈥�
+      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
+  },
+
+  /**
+   * 鎵惧埌鍦ㄧ粰瀹氱殑寮�濮嬫椂闂碽t鍜岀粨鏉熸椂闂磂t涔嬮棿缂哄け鐨勬椂闂村尯闂�
+   * @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
+  }
+}

--
Gitblit v1.9.3