From 706936f92734c91143b5a2c7b7d5d4327d2d4a5a Mon Sep 17 00:00:00 2001 From: sjchen <13418980720@163.com> Date: Mon, 20 Jan 2025 11:26:00 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9D=A1=E7=9C=A0=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index/index.js | 17 ++++++-- index/index.wxml | 2 + utils/CommonUtil.js | 98 +++++++++++++++++++++++++++------------------ 3 files changed, 75 insertions(+), 42 deletions(-) diff --git a/index/index.js b/index/index.js index b5f2b98..4f79eee 100644 --- a/index/index.js +++ b/index/index.js @@ -80,7 +80,8 @@ Page({ console.log("advertisData: ",hexStr) // 连接指定设备 // if(device.deviceId=="03:02:02:07:65:98"){ - // if(device.deviceId=="03:02:02:07:62:A3"){ + // if(device.deviceId=="03:02:02:07:5C:B7"){ + // if(device.deviceId=="03:02:02:07:65:98"){ if(device.deviceId=="03:02:02:07:5E:BE"){ this.connectToDevice(device.deviceId); } @@ -298,10 +299,10 @@ Page({ let list = this.data.sleepList; if(list.length > 0){ - // console.log("list:",list) + console.log("list:",list) // 补全数据 let completeList = CommonUtil.completeMissingData(list); - // console.log("completeList:",completeList); + console.log("completeList:",completeList); // 组装数据 let arr = CommonUtil.assembleSleepData(completeList); // 组装后数据进行排序 @@ -352,6 +353,16 @@ Page({ }, + timeTest(){ + let dateRange = CommonUtil.getDayTimeRange("20250119",91); + console.log("dateRange",dateRange); + + let time = CommonUtil.getTimestampFromDateAndMinutes("20250119",91); + console.log("time",time); + + console.log("对比结果:",time >= dateRange.startTimestamp && time <= dateRange.endTimestamp) + + }, getPower(){ // 获取电量 // const batteryPacket = DataPacket.generateBatteryCheckPacket(); diff --git a/index/index.wxml b/index/index.wxml index 2506c49..a494290 100644 --- a/index/index.wxml +++ b/index/index.wxml @@ -9,5 +9,7 @@ + + \ No newline at end of file diff --git a/utils/CommonUtil.js b/utils/CommonUtil.js index 1033f13..fa2d713 100644 --- a/utils/CommonUtil.js +++ b/utils/CommonUtil.js @@ -180,6 +180,7 @@ const CommonUtil = { */ assembleSleepData(sleepArray) { let compareDate = sleepArray[0].yyyyMMdd; // 获取第一个数据的时间作为比对时间 + let compareMinute = sleepArray[0].minute; let res = []; // 存放最终结果 let resItem = { // 每天的睡眠数据对象 date: '', @@ -192,7 +193,7 @@ const CommonUtil = { resItem.sleepList.push(firstSleepData); // 将第一个数据放入到 `sleepList` sleepArray.forEach((item,index) => { // 判断是否是同一天的数据 - let isSameDay = this.timeComparison(compareDate, item.yyyyMMdd, item.minute); + let isSameDay = this.timeComparison(compareDate,compareMinute, item.yyyyMMdd, item.minute); // 如果状态发生变化,且日期不同,就表示开始新的睡眠数据 if (item.status !== firstSleepData.status) { @@ -209,6 +210,7 @@ const CommonUtil = { sleepList: [item] // 将当前项作为新的睡眠数据开始 }; compareDate = item.yyyyMMdd; // 更新对比日期,用于比对后续数据 + compareMinute = item.minute; } } firstSleepData = item; // 更新当前比对的睡眠数据 @@ -230,29 +232,53 @@ const CommonUtil = { * 计算出一天的时间范围 * @param {对比日期} compareDate */ - getDayTimeRange(compareDate) { + getDayTimeRange(compareDate,compareMinute) { // 将 "YYYYMMDD" 格式的日期转换为 "YYYY-MM-DD" 格式,方便解析 const formattedDateStr = compareDate.replace(/(\d{4})(\d{2})(\d{2})/, '$1-$2-$3'); // 创建目标日期对象 - const date = new Date(formattedDateStr); // 例如:2024-12-12 + // const date = new Date(formattedDateStr); // 例如:2024-12-12 // 获取对比日期的Date,前一天的20:00:00 - const prevDayStart = new Date(date); - prevDayStart.setDate(date.getDate() - 1); //设置为前一天 + // const prevDayStart = new Date(date); + // prevDayStart.setDate(date.getDate() - 1); //设置为前一天 + // prevDayStart.setHours(20, 0, 0, 0); // 设置为20:00:00 + // // 获取对比日期的Date,后一天的10:00:00 + // const nextDayEnd = new Date(date); + // nextDayEnd.setDate(date.getDate()); // 设置为后一天 + // nextDayEnd.setHours(10, 0, 0, 0); // 设置为10:00:00 + + // 获取对比日期的Date,前一天的20:00:00 + const date1 = new Date(formattedDateStr) + const date2 = new Date(formattedDateStr) + const prevDayStart = new Date(date1); + if(this.isEveningTime(compareMinute)){ + prevDayStart.setDate(date1.getDate()); + } else { + prevDayStart.setDate(date1.getDate() - 1); + } prevDayStart.setHours(20, 0, 0, 0); // 设置为20:00:00 // 获取对比日期的Date,后一天的10:00:00 - const nextDayEnd = new Date(date); - nextDayEnd.setDate(date.getDate()); // 设置为后一天 + const nextDayEnd = new Date(date2); + if(this.isEveningTime(compareMinute)){ + nextDayEnd.setDate(date2.getDate() + 1); + } else { + nextDayEnd.setDate(date2.getDate()); + } nextDayEnd.setHours(10, 0, 0, 0); // 设置为10:00:00 - + // 返回时间戳 return { startTimestamp: prevDayStart.getTime(), // 转换为10位时间戳 endTimestamp: nextDayEnd.getTime() // 转换为10位时间戳 }; }, - - + /** + * 判断是否是晚上的20:00~00:00点 + * @param {*} minute + */ + isEveningTime(minute){ + return minute < 1440 && minute > 1200; + }, /** * * @param {日期} dateStr @@ -281,9 +307,9 @@ const CommonUtil = { * @param {分钟} minute * @param {比较值} comparisonValue */ - timeComparison(compareDate,comparisonValue,minute){ + timeComparison(compareDate,compareMinute,comparisonValue,minute){ - let dateRange = this.getDayTimeRange(compareDate); + let dateRange = this.getDayTimeRange(compareDate,compareMinute); let time = this.getTimestampFromDateAndMinutes(comparisonValue,minute); if(time >= dateRange.startTimestamp && time <= dateRange.endTimestamp){ // 在范围内,是同一天睡眠 @@ -295,26 +321,17 @@ const CommonUtil = { sortSleep(data){ data.forEach((item) =>{ // 排序算法 - item.sleepList.sort((a, b) => { - // 先比较 yyyyMMdd - if (a.yyyyMMdd !== b.yyyyMMdd) { - return a.yyyyMMdd.localeCompare(b.yyyyMMdd); - } - // 再比较 minute - return a.minute - b.minute; - }); + // item.sleepList.sort((a, b) => { + // // 先比较 yyyyMMdd + // if (a.yyyyMMdd !== b.yyyyMMdd) { + // return a.yyyyMMdd.localeCompare(b.yyyyMMdd); + // } + // // 再比较 minute + // return a.minute - b.minute; + // }); // 因为后端的接口处理方式为如果第一个数据为清醒,不会作为睡眠时间,故将第一个数据作为浅睡 item.sleepList[0].status = 1 - // 获取最后一个对象 - // const lastItem = item.sleepList[item.sleepList.length - 1]; - // // 创建新对象并插入到最后 - // if (lastItem) { - // const newObject = { - // ...lastItem, // 复制最后一个对象的内容 - // minute: lastItem.minute + 1 // minute 加 1 - // }; - // item.sleepList.push(newObject); // 插入到最后 - // } + item.date = item.sleepList[item.sleepList.length - 1].yyyyMMdd }) return data; }, @@ -324,6 +341,16 @@ const CommonUtil = { * @param {补全数据} data */ completeMissingData(data){ + + data.sort((a, b) => { + // 先比较 yyyyMMdd + if (a.yyyyMMdd !== b.yyyyMMdd) { + return a.yyyyMMdd.localeCompare(b.yyyyMMdd); + } + // 再比较 minute + return a.minute - b.minute; + }); + let result = []; // 存放最终结果 for (let i = 0; i < data.length; i++) { @@ -333,7 +360,7 @@ const CommonUtil = { if (i < data.length - 1) { let currentMinute = data[i].minute; let nextMinute = data[i + 1].minute; - if(data[i].yyyyMMdd == data[i + 1].yyyyMMdd){ + if(data[i].yyyyMMdd == data[i + 1].yyyyMMdd && nextMinute - currentMinute < 600){ // 如果不连续,补全缺失的数据 if (nextMinute > currentMinute + 1) { for (let j = currentMinute + 1; j < nextMinute; j++) { @@ -348,14 +375,7 @@ const CommonUtil = { } } - // result.sort((a, b) => { - // // 先比较 yyyyMMdd - // if (a.yyyyMMdd !== b.yyyyMMdd) { - // return a.yyyyMMdd.localeCompare(b.yyyyMMdd); - // } - // // 再比较 minute - // return a.minute - b.minute; - // }); + return result; }