睡眠优化,一天最后一条睡眠数据由原来的修改改成添加一条数据

main
sjchen 5 months ago
parent 784a267d08
commit 191ec6b31b

@ -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);
// 组装后数据进行排序

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

Loading…
Cancel
Save