From 191ec6b31b05886967b7e6a7ee904eec69124b70 Mon Sep 17 00:00:00 2001 From: sjchen <13418980720@163.com> Date: Sun, 19 Jan 2025 22:02:16 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9D=A1=E7=9C=A0=E4=BC=98=E5=8C=96=EF=BC=8C?= =?UTF-8?q?=E4=B8=80=E5=A4=A9=E6=9C=80=E5=90=8E=E4=B8=80=E6=9D=A1=E7=9D=A1?= =?UTF-8?q?=E7=9C=A0=E6=95=B0=E6=8D=AE=E7=94=B1=E5=8E=9F=E6=9D=A5=E7=9A=84?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=94=B9=E6=88=90=E6=B7=BB=E5=8A=A0=E4=B8=80?= =?UTF-8?q?=E6=9D=A1=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index/index.js | 8 ++--- utils/CommonUtil.js | 72 ++++++++++++++++++++++++++------------------- 2 files changed, 46 insertions(+), 34 deletions(-) diff --git a/index/index.js b/index/index.js index 2fed51c..b5f2b98 100644 --- a/index/index.js +++ b/index/index.js @@ -71,7 +71,7 @@ Page({ getBluetoothDevices() { wx.onBluetoothDeviceFound((res) => { // 过滤出名称以 "GJ-SH-01" 开头的设备 - const targetDevices = res.devices.filter(device => device.name && (device.name.startsWith("J2203") || device.name.startsWith("小柏智能手表"))); + const targetDevices = res.devices.filter(device => device.name && (device.name.startsWith("J2203") || device.name.startsWith("小柏"))); // 遍历并连接符合条件的设备 targetDevices.forEach(device => { @@ -80,7 +80,7 @@ Page({ console.log("advertisData: ",hexStr) // 连接指定设备 // if(device.deviceId=="03:02:02:07:65:98"){ - // if(device.deviceId=="03:02:02:07:5F:AF"){ + // if(device.deviceId=="03:02:02:07:62:A3"){ if(device.deviceId=="03:02:02:07:5E:BE"){ this.connectToDevice(device.deviceId); } @@ -298,10 +298,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); // 组装后数据进行排序 diff --git a/utils/CommonUtil.js b/utils/CommonUtil.js index 8f51028..1033f13 100644 --- a/utils/CommonUtil.js +++ b/utils/CommonUtil.js @@ -179,7 +179,6 @@ const CommonUtil = { * 组装睡眠数据 */ assembleSleepData(sleepArray) { - console.log("sleepArray:",sleepArray) let compareDate = sleepArray[0].yyyyMMdd; // 获取第一个数据的时间作为比对时间 let res = []; // 存放最终结果 let resItem = { // 每天的睡眠数据对象 @@ -193,14 +192,17 @@ 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, item.yyyyMMdd, item.minute); + // 如果状态发生变化,且日期不同,就表示开始新的睡眠数据 if (item.status !== firstSleepData.status) { if (isSameDay) { resItem.sleepList.push(item); } else { // 取出数据 - resItem.sleepList[resItem.sleepList.length - 1] = sleepArray[index - 1]; + let lastItem = sleepArray[index - 1]; + lastItem.minute = lastItem.minute + 1;//加1分钟作为起床点 + resItem.sleepList.push(lastItem); res.push(resItem); // 否则,将当天的数据推入结果数组 resItem = { // 新的一天开始 date: item.yyyyMMdd, @@ -214,34 +216,33 @@ const CommonUtil = { // 最后一次的睡眠数据也需要被加入到 `res` if (resItem.sleepList.length > 0) { - // 这里要把最后一条数据set作为起床时间,否则起床时间会不对 - resItem.sleepList[resItem.sleepList.length - 1] = sleepArray[sleepArray.length - 1]; + // 获取最后一个数据添加到最后 + let lastItem = sleepArray[sleepArray.length - 1]; + lastItem.minute = lastItem.minute + 1;//加1分钟作为起床点 + resItem.sleepList.push(lastItem); res.push(resItem); } - return res; // 返回按天拆分后的睡眠数据 }, /** * 计算出一天的时间范围 - * @param {日期} dateStr + * @param {对比日期} compareDate */ - getPreviousDayTimeRange(dateStr) { + getDayTimeRange(compareDate) { // 将 "YYYYMMDD" 格式的日期转换为 "YYYY-MM-DD" 格式,方便解析 - const formattedDateStr = dateStr.replace(/(\d{4})(\d{2})(\d{2})/, '$1-$2-$3'); - + const formattedDateStr = compareDate.replace(/(\d{4})(\d{2})(\d{2})/, '$1-$2-$3'); // 创建目标日期对象 const date = new Date(formattedDateStr); // 例如:2024-12-12 - // 1. 获取前一天的 20:00:00 - const prevDayStart = new Date(date); // 克隆原日期 - prevDayStart.setDate(date.getDate() - 1); // 设置为前一天 - prevDayStart.setHours(20, 0, 0, 0); // 设置为20:00:00 - - // 2. 获取当天的 10:00:00 - const nextDayEnd = new Date(date); // 克隆原日期 - nextDayEnd.setDate(date.getDate()); // 保持为当天 + // 获取对比日期的Date,前一天的20:00:00 + 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 // 返回时间戳 @@ -276,12 +277,13 @@ const CommonUtil = { /** * - * @param {日期范围} date + * @param {对比日期} compareDate * @param {分钟} minute * @param {比较值} comparisonValue */ - timeComparison(date,comparisonValue,minute){ - let dateRange = this.getPreviousDayTimeRange(date); + timeComparison(compareDate,comparisonValue,minute){ + + let dateRange = this.getDayTimeRange(compareDate); let time = this.getTimestampFromDateAndMinutes(comparisonValue,minute); if(time >= dateRange.startTimestamp && time <= dateRange.endTimestamp){ // 在范围内,是同一天睡眠 @@ -301,17 +303,18 @@ const CommonUtil = { // 再比较 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); // 插入到最后 - } + // const lastItem = item.sleepList[item.sleepList.length - 1]; + // // 创建新对象并插入到最后 + // if (lastItem) { + // const newObject = { + // ...lastItem, // 复制最后一个对象的内容 + // minute: lastItem.minute + 1 // minute 加 1 + // }; + // item.sleepList.push(newObject); // 插入到最后 + // } }) return data; }, @@ -344,6 +347,15 @@ 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; }