Php 获取睡眠时长-上午下午

            //睡眠记录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;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值