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;
}