统计分析--时间x值分组

在项目中做统计分析实在是想法乱入,各种x,y值都会出现,但以时间为统计单位还是比较常见,这里记录一个自己写的时间分组小函数

代码如下:

function timeArrayProcess($startTime, $endTime, $type = null) {
        $format = "Y-m-d H:i:s";
        if ($startTime > $endTime) {
            $temp = $startTime;
            $startTime = $endTime;
            $endTime = $temp;
        }
        $timeLength = date_diff(date_create($startTime), date_create($endTime));
        //echo $diff->format("%a days");
        $s_stamp = strtotime($startTime);
        $e_stamp = strtotime($endTime);
        $time_arr = array();
        if (empty($type)) {
            if ($timeLength->days <= 1) {
                $type = "hour";
            } elseif (($timeLength->days > 1) and ( $timeLength->days <= 31)) {
                $type = "day";
            } elseif (($timeLength->days > 31) and ( $timeLength->days <= 92)) {
                $type = "week";
            } elseif (($timeLength->days > 92) and ( $timeLength->days <= 730)) {
                $type = "month";
            } else {
                $type = "year";
            }
        }
        switch ($type) {
            case hour:
                $start = date('Y-m-d H:00:00', strtotime($startTime));
                $end = date('Y-m-d H:00:00', strtotime($endTime));
                $ns_stamp = strtotime($start);
                $ne_stamp = strtotime($end);
                if ($ns_stamp == $s_stamp) {
                    $i = 0;
                    $ns_stamp = $s_stamp;
                } else {
                    $i = 1;
                    $time_arr[0][x] = date('Y-m-d H', $s_stamp) . "时";
                    $time_arr[0][start] = date($format, $s_stamp);
                    $ns_stamp+=3599;
                    $time_arr[0][end] = date($format, $ns_stamp);
                    $ns_stamp+=1;
                }
                while ($ns_stamp < $ne_stamp) {
                    $time_arr[$i][x] = date('Y-m-d H', $ns_stamp) . "时";
                    $time_arr[$i][start] = date($format, $ns_stamp);
                    $ns_stamp+=3599;
                    //if ($ns_stamp < $ne_stamp) {
                    $time_arr[$i][end] = date($format, $ns_stamp);
                    $ns_stamp+=1;
                    $i++;
                    //} else {
                    //break;
                    // }
                }
                //$e_stamp-=1;
                if ($ne_stamp < $e_stamp) {
                    $time_arr[$i][x] = date('Y-m-d H', $ne_stamp) . "时";
                    $time_arr[$i][start] = date($format, $ne_stamp);
                    $time_arr[$i][end] = date($format, $e_stamp);
                }
                break;
            case day:
                $start = date('Y-m-d', strtotime($startTime));
                $end = date('Y-m-d', strtotime($endTime));
                $ns_stamp = strtotime($start);
                $ne_stamp = strtotime($end);
                if ($ns_stamp == $s_stamp) {
                    $i = 0;
                } else {
                    $i = 1;
                    $time_arr[0][x] = date('Y-m-d', $s_stamp);
                    $time_arr[0][start] = date($format, $s_stamp);
                    $ns_stamp+=86399;
                    $time_arr[0][end] = date($format, $ns_stamp);
                    $ns_stamp+=1;
                }//$ne_stamp = $e_stamp;
                while ($ns_stamp < $ne_stamp) {
                    $time_arr[$i][x] = date('Y-m-d', $ns_stamp);
                    $time_arr[$i][start] = date($format, $ns_stamp);
                    $ns_stamp+=86399;
                    if ($ns_stamp < $ne_stamp) {
                        $time_arr[$i][end] = date($format, $ns_stamp);
                        $ns_stamp+=1;
                        $i++;
                    }
                }
                //$e_stamp=1;
                //if ($ne_stamp < $e_stamp) {
                $time_arr[$i][x] = date('Y-m-d', $ns_stamp);
                $time_arr[$i][start] = date($format, $ns_stamp);
                $time_arr[$i][end] = date($format, $e_stamp);
                //}
                break;
            case week:
                $start = date('Y-m-d', strtotime($startTime));
                $end = date('Y-m-d', strtotime($endTime));
                $ns_stamp = strtotime($start);
                $ne_stamp = strtotime($end);
                if ($ns_stamp == $s_stamp) {
                    $i = 0;
                } else {
                    $i = 1;
                    $time_arr[0][x] = date('Y-m-d', $s_stamp);
                    $time_arr[0][start] = date($format, $s_stamp);
                    $w = date('N', strtotime($time_arr[0][start]));
                    $ns_stamp+=(8 - $w ) * 86400 - 1;
                    $time_arr[0][end] = date($format, $ns_stamp);
                    $arr = array(date('Y-m-d', strtotime($time_arr[0][start])), date('Y-m-d', strtotime($time_arr[0][end])));
                    $time_arr[0][x] = implode("~", $arr);
                    $ns_stamp+=1;
                }
                //$ne_stamp = $e_stamp;
                while ($ns_stamp < $ne_stamp) {
                    $time_arr[$i][x] = date('Y-m-d', $ns_stamp);
                    $time_arr[$i][start] = date($format, $ns_stamp);
                    $ns_stamp+=604799; //(7 * 86400 - 1)
                    if ($ns_stamp < $ne_stamp) {
                        $time_arr[$i][end] = date($format, $ns_stamp);
                        $arr = array(date('Y-m-d', strtotime($time_arr[$i][start])), date('Y-m-d', strtotime($time_arr[$i][end])));
                        $time_arr[$i][x] = implode("~", $arr);
                        $ns_stamp+=1;
                        $i++;
                    } /* else {
                      break;
                      } */
                }
                //$e_stamp-=1;
                //if ($ne_stamp < $e_stamp) {
                $time_arr[$i][start] = date($format, $ns_stamp);
                $time_arr[$i][end] = date($format, $e_stamp);
                $arr = array(date('Y-m-d', strtotime($time_arr[$i][start])), date('Y-m-d', strtotime($time_arr[$i][end])));
                $time_arr[$i][x] = implode("~", $arr);
                //}
                break;
            case month:
                $start = date('Y-m', strtotime($startTime));
                $end = date('Y-m', strtotime($endTime));
                $ns_stamp = strtotime($start);
                $ne_stamp = strtotime($end);
                if ($ns_stamp == $s_stamp) {
                    $i = 0;
                    $ns_stamp = $s_stamp;
                } else {
                    $i = 1;
                    $time_arr[0][x] = date('Y-m', $s_stamp);
                    $time_arr[0][start] = date($format, $s_stamp);
                    $num = date("t", $s_stamp);
                    $ns_stamp+=$num * 86400 - 1;
                    $time_arr[0][end] = date($format, $ns_stamp);
                    $ns_stamp+=1;
                }
                while ($ns_stamp < $ne_stamp) {//这里累加每个月的的总秒数 计算公式:上一月1号的时间戳秒数减去当前月的时间戳秒数
                    $time_arr[$i][x] = date('Y-m', $ns_stamp);
                    $time_arr[$i][start] = date($format, strtotime($time_arr[$i][x]));
                    $num = date("t", $ns_stamp);
                    $ns_stamp+=$num * 86400 - 1;
                    $time_arr[$i][end] = date($format, $ns_stamp);
                    $ns_stamp+=1;
                    $i++;
                }
                //$e_stamp-=1;
                //if ($ne_stamp < $e_stamp) {
                $time_arr[$i][x] = date('Y-m', $ne_stamp);
                $time_arr[$i][start] = date($format, strtotime($time_arr[$i][x]));
                $time_arr[$i][end] = date($format, $e_stamp);
                //}
                break;
            case year:
                $start = date('Y-01-01 00:00:00', strtotime($startTime));
                $end = date('Y-01-01 00:00:00', strtotime($endTime));
                $ns_stamp = strtotime($start);
                $ne_stamp = strtotime($end);
                if ($ns_stamp == $s_stamp) {
                    $i = 0;
                } else {
                    $i = 1;
                    $time_arr[0][x] = date('Y', $s_stamp);
                    $time_arr[0][start] = date($format, $s_stamp);
                    $s_stamp = strtotime(date("Y-12-31 23:59:59", $s_stamp));
                    $time_arr[0][end] = date($format, $s_stamp);
                    $nu = 0;
                    for ($j = 01; $j <= 12; $j++) {
                        $stamp = strtotime(date("Y-$j", $s_stamp));
                        $nu += date("t", $stamp);
                    }
                    $ns_stamp+=$nu * 86400;
                }//$ne_stamp = $e_stamp;
                while ($ns_stamp < $ne_stamp) {
                    $time_arr[$i][x] = date('Y', $ns_stamp);
                    $time_arr[$i][start] = date($format, $ns_stamp);
                    $n = 0;
                    for ($j = 01; $j <= 12; $j++) {
                        $stamp = strtotime(date("Y-$j", $ns_stamp));
                        $n += date("t", $stamp);
                    }
                    $ns_stamp+=$n * 86400 - 1;
                    $time_arr[$i][end] = date($format, $ns_stamp);
                    $ns_stamp+=1;
                    $i++;
                }
                //$e_stamp-=1;
                //if ($ne_stamp < $e_stamp) {
                $time_arr[$i][x] = date('Y', $ne_stamp);
                $time_arr[$i][start] = date($format, $ne_stamp);
                $time_arr[$i][end] = date($format, $e_stamp);
                //}
                break;
            default:
                break;
        }
        //var_dump($time_arr);
        return $time_arr;
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值