睡眠优化

main
sjchen 5 months ago
parent 191ec6b31b
commit 706936f927

@ -80,7 +80,8 @@ Page({
console.log("advertisData: ",hexStr) console.log("advertisData: ",hexStr)
// 连接指定设备 // 连接指定设备
// if(device.deviceId=="03:02:02:07:65:98"){ // 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"){ if(device.deviceId=="03:02:02:07:5E:BE"){
this.connectToDevice(device.deviceId); this.connectToDevice(device.deviceId);
} }
@ -298,10 +299,10 @@ Page({
let list = this.data.sleepList; let list = this.data.sleepList;
if(list.length > 0){ if(list.length > 0){
// console.log("list:",list) console.log("list:",list)
// 补全数据 // 补全数据
let completeList = CommonUtil.completeMissingData(list); let completeList = CommonUtil.completeMissingData(list);
// console.log("completeList:",completeList); console.log("completeList:",completeList);
// 组装数据 // 组装数据
let arr = CommonUtil.assembleSleepData(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(){ getPower(){
// 获取电量 // 获取电量
// const batteryPacket = DataPacket.generateBatteryCheckPacket(); // const batteryPacket = DataPacket.generateBatteryCheckPacket();

@ -10,4 +10,6 @@
<button bindtap="removeCache">清除时间戳缓存</button> <button bindtap="removeCache">清除时间戳缓存</button>
<!-- <button bindtap="removeHistoryData">清空历史数据</button> --> <!-- <button bindtap="removeHistoryData">清空历史数据</button> -->
<button bindtap="timeTest">时间</button>
</view> </view>

@ -180,6 +180,7 @@ const CommonUtil = {
*/ */
assembleSleepData(sleepArray) { assembleSleepData(sleepArray) {
let compareDate = sleepArray[0].yyyyMMdd; // 获取第一个数据的时间作为比对时间 let compareDate = sleepArray[0].yyyyMMdd; // 获取第一个数据的时间作为比对时间
let compareMinute = sleepArray[0].minute;
let res = []; // 存放最终结果 let res = []; // 存放最终结果
let resItem = { // 每天的睡眠数据对象 let resItem = { // 每天的睡眠数据对象
date: '', date: '',
@ -192,7 +193,7 @@ const CommonUtil = {
resItem.sleepList.push(firstSleepData); // 将第一个数据放入到 `sleepList` resItem.sleepList.push(firstSleepData); // 将第一个数据放入到 `sleepList`
sleepArray.forEach((item,index) => { 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) { if (item.status !== firstSleepData.status) {
@ -209,6 +210,7 @@ const CommonUtil = {
sleepList: [item] // 将当前项作为新的睡眠数据开始 sleepList: [item] // 将当前项作为新的睡眠数据开始
}; };
compareDate = item.yyyyMMdd; // 更新对比日期,用于比对后续数据 compareDate = item.yyyyMMdd; // 更新对比日期,用于比对后续数据
compareMinute = item.minute;
} }
} }
firstSleepData = item; // 更新当前比对的睡眠数据 firstSleepData = item; // 更新当前比对的睡眠数据
@ -230,19 +232,38 @@ const CommonUtil = {
* 计算出一天的时间范围 * 计算出一天的时间范围
* @param {对比日期} compareDate * @param {对比日期} compareDate
*/ */
getDayTimeRange(compareDate) { getDayTimeRange(compareDate,compareMinute) {
// 将 "YYYYMMDD" 格式的日期转换为 "YYYY-MM-DD" 格式,方便解析 // 将 "YYYYMMDD" 格式的日期转换为 "YYYY-MM-DD" 格式,方便解析
const formattedDateStr = compareDate.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 // const date = new Date(formattedDateStr); // 例如2024-12-12
// 获取对比日期的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
// 获取对比日期的Date前一天的20:00:00 // 获取对比日期的Date前一天的20:00:00
const prevDayStart = new Date(date); const date1 = new Date(formattedDateStr)
prevDayStart.setDate(date.getDate() - 1); //设置为前一天 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 prevDayStart.setHours(20, 0, 0, 0); // 设置为20:00:00
// 获取对比日期的Date后一天的10:00:00 // 获取对比日期的Date后一天的10:00:00
const nextDayEnd = new Date(date); const nextDayEnd = new Date(date2);
nextDayEnd.setDate(date.getDate()); // 设置为后一天 if(this.isEveningTime(compareMinute)){
nextDayEnd.setDate(date2.getDate() + 1);
} else {
nextDayEnd.setDate(date2.getDate());
}
nextDayEnd.setHours(10, 0, 0, 0); // 设置为10:00:00 nextDayEnd.setHours(10, 0, 0, 0); // 设置为10:00:00
// 返回时间戳 // 返回时间戳
@ -251,8 +272,13 @@ const CommonUtil = {
endTimestamp: nextDayEnd.getTime() // 转换为10位时间戳 endTimestamp: nextDayEnd.getTime() // 转换为10位时间戳
}; };
}, },
/**
* 判断是否是晚上的20:00~00:00
* @param {*} minute
*/
isEveningTime(minute){
return minute < 1440 && minute > 1200;
},
/** /**
* *
* @param {日期} dateStr * @param {日期} dateStr
@ -281,9 +307,9 @@ const CommonUtil = {
* @param {分钟} minute * @param {分钟} minute
* @param {比较值} comparisonValue * @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); let time = this.getTimestampFromDateAndMinutes(comparisonValue,minute);
if(time >= dateRange.startTimestamp && time <= dateRange.endTimestamp){ if(time >= dateRange.startTimestamp && time <= dateRange.endTimestamp){
// 在范围内,是同一天睡眠 // 在范围内,是同一天睡眠
@ -295,26 +321,17 @@ const CommonUtil = {
sortSleep(data){ sortSleep(data){
data.forEach((item) =>{ data.forEach((item) =>{
// 排序算法 // 排序算法
item.sleepList.sort((a, b) => { // item.sleepList.sort((a, b) => {
// 先比较 yyyyMMdd // // 先比较 yyyyMMdd
if (a.yyyyMMdd !== b.yyyyMMdd) { // if (a.yyyyMMdd !== b.yyyyMMdd) {
return a.yyyyMMdd.localeCompare(b.yyyyMMdd); // return a.yyyyMMdd.localeCompare(b.yyyyMMdd);
} // }
// 再比较 minute // // 再比较 minute
return a.minute - b.minute; // return a.minute - b.minute;
}); // });
// 因为后端的接口处理方式为如果第一个数据为清醒,不会作为睡眠时间,故将第一个数据作为浅睡 // 因为后端的接口处理方式为如果第一个数据为清醒,不会作为睡眠时间,故将第一个数据作为浅睡
item.sleepList[0].status = 1 item.sleepList[0].status = 1
// 获取最后一个对象 item.date = item.sleepList[item.sleepList.length - 1].yyyyMMdd
// 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; return data;
}, },
@ -324,6 +341,16 @@ const CommonUtil = {
* @param {补全数据} data * @param {补全数据} data
*/ */
completeMissingData(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 = []; // 存放最终结果 let result = []; // 存放最终结果
for (let i = 0; i < data.length; i++) { for (let i = 0; i < data.length; i++) {
@ -333,7 +360,7 @@ const CommonUtil = {
if (i < data.length - 1) { if (i < data.length - 1) {
let currentMinute = data[i].minute; let currentMinute = data[i].minute;
let nextMinute = data[i + 1].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) { if (nextMinute > currentMinute + 1) {
for (let j = currentMinute + 1; j < nextMinute; j++) { 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; return result;
} }

Loading…
Cancel
Save