//睡眠记录start
if ($type['ovalue'] == '睡眠') {
//获取上午-睡眠记录
$am_time_str = date("Y-m-d") . " 00:00:00";
$am_time_end = date("Y-m-d") . " 11:59:59";
$am_time_end_d = date("Y-m-d", strtotime("-1 day")) . " 20:00:00";
//获取下午-睡眠记录
$pm_time_str = date("Y-m-d") . " 12:00:00";
$pm_time_end = date("Y-m-d") . " 23:59:59";
//$pm_time_end_d = date("Y-m-d", strtotime("-1 day")) . " 08:00:00";
//查询出昨晚到上午的数据信息
$sleeps_am_d = Record::where('type', $type['okey'])
->where('start_time', '>=', $am_time_end_d)
->where('end_time', '<=', $am_time_end)
->where('family_id', $familyId)
->where('person_id', $personId)
->select('start_time', 'end_time')
->get()->toArray();
//查询出下午的数据信息
$sleeps_pm = Record::where('type', $type['okey'])
->where('start_time', '>=', $pm_time_str)
->where('end_time', '<=', $pm_time_end)
->where('family_id', $familyId)
->where('person_id', $personId)
->select('start_time', 'end_time')
->get()->toArray();
//查询出当日上午至中午的数据信息
$sleeps_apm = Record::where('type', $type['okey'])
->where('start_time', '<=', date("Y-m-d") . " 12:00:00")
->where('end_time', '>=', date("Y-m-d") . " 12:00:00")
->where('family_id', $familyId)
->where('person_id', $personId)
->select('start_time', 'end_time')
->get()->toArray();
//获取上午数据总时长
$am_number = 0;
foreach ($sleeps_am_d as $key => $val) {
//判断是否存在昨天到今天的睡眠段
if (date("d", strtotime($val['start_time'])) != date("d")) {
//只查询今日,数据做以处理
$val['start_time'] = date("Y-m-d") . " 00:00:00";
}
$am_number += $this->datefram($val['start_time'], $val['end_time']);
}
//获取下午数据总时长
$pm_number = 0;
foreach ($sleeps_pm as $key_p => $val_p) {
//判断是否存在今天上午到下午的睡眠段
$pm_number += $this->datefram($val_p['start_time'], $val_p['end_time']);
}
//上午睡至下午区间
if (!empty($sleeps_apm)) {
foreach ($sleeps_apm as $kap => $vap) {
//上午差额时间
$am_number += $this->datefram($vap['start_time'], date("Y-m-d") . " 12:00:00");
//下午差额时间
$pm_number += $this->datefram(date("Y-m-d") . " 12:00:00", $vap['end_time']);
}
}
//上午睡眠总时长
$am_sm_total_time = number_format($am_number / 60, 1);
//下午睡眠总时长
$pm_sm_total_time = number_format($pm_number / 60, 1);
$now_time = time();
//$now_time = 1672292002;
//上午总时长
$am_time = 12;
//未知时长 //获取当前时间是否在上午时间段
if ($now_time >= strtotime($am_time_str) && $now_time <= strtotime($am_time_end)) {
//在上午时段,获取未知时长
$am_time_null = number_format($this->datefram(date("Y-m-d H:i:s", $now_time), $am_time_end) / 60, 1);
} else {
//不在上午时间段,未知时长为0
$am_time_null = "0.0";
}
//清醒时长
$am_qx_total_time = number_format($am_time - $am_sm_total_time - $am_time_null, 1);
//睡眠
$sleep_date['am_sm'] = $am_sm_total_time;
//睡眠占比
$sleep_date['am_sm_zb'] = round($am_sm_total_time / 12 * 100, 1) . "%";
//清醒
$sleep_date['am_qx'] = $am_qx_total_time;
//清醒占比
$sleep_date['am_qx_zb'] = round($am_qx_total_time / 12 * 100, 1) . "%";
//未知
$sleep_date['am_wz'] = $am_time_null;
//未知占比
$sleep_date['am_wz_zb'] = round($am_time_null / 12 * 100, 1) . "%";
//下午时间段
//未知时长
$pm_time_null = number_format($this->datefram(date("Y-m-d H:i:s", $now_time), $pm_time_end) / 60, 1);
// print_r($pm_time_null);die;
$pm_qx_total_time = number_format($am_time - $pm_sm_total_time - $pm_time_null, 1);
//睡眠
$sleep_date['pm_sm'] = $pm_sm_total_time;
//睡眠占比
$sleep_date['pm_sm_zb'] = round($pm_sm_total_time / 12 * 100, 1) . "%";
//如果下午没有睡眠,就未知12小时
if ($pm_sm_total_time == 0 && $now_time <= strtotime($pm_time_str)) {
$pm_qx_total_time = "0.0";
$pm_time_null = "12.0";
}
//清醒
$sleep_date['pm_qx'] = $pm_qx_total_time;
//清醒占比
$sleep_date['pm_qx_zb'] = round($pm_qx_total_time / 12 * 100, 1) . "%";
//未知
$sleep_date['pm_wz'] = $pm_time_null;
//未知占比
$sleep_date['pm_wz_zb'] = round($pm_time_null / 12 * 100, 1) . "%";
$this->responseData['sleep_date'] = $sleep_date;
//睡眠 end
}
//求两个日期时间差
public function datefram($start,$end){
$startdate=$start;//开始时间
$enddate=$end;//结束时间
// $date=floor((strtotime($enddate)-strtotime($startdate))/86400);
// echo "相差天数:".$date."天<br><br>";
$hour=floor((strtotime($enddate)-strtotime($startdate))%86400/3600);
$minute=floor((strtotime($enddate)-strtotime($startdate))%86400/60);
/* $second=floor((strtotime($enddate)-strtotime($startdate))%86400%60);
echo"相差秒数:".$second."秒";*/
return $minute;
}