声明:本站文章均为作者个人原创,图片均为实际截图。如有需要请收藏网站,禁止转载,谢谢配合!!!

1、获取一段时间日期数组

use Carbon\CarbonPeriod;
/**
 * 获取日期数组
 * @param $start
 * @param $end
 * @param int $init 初始化值
 */
 function getPeriod($start, $end, $init = 0)
{
    $period_arr = CarbonPeriod::create($start, $end);
    $x = $y = $data_arr = [];
    //初始化数据
    foreach ($period_arr as $date) {
        $t = $date->format('Y-m-d');
        $x[] = $t;
        //$r = random_int(1,100); //使用随机数模拟数据
        $r = $init;
        $data_arr[$t] = $r;
        $y[] = $r;
    }
    return ['x' => $x, 'data' => $data_arr, 'y' => $y];
}

2、统计接口封装日期

    protected $post = [];
    protected $start = '';
    protected $end = '';
    protected $start_ts = 0; //时间戳
    protected $end_ts = 0;//时间戳
    protected $period = [];

    public function _initialize()
    {
        parent::_initialize(); 
        $this->post = $this->request->param();
        $this->start = !empty($this->post['start']) ? $this->post['start'] : Carbon::now()->firstOfMonth()->format('Y-m-d'); //默认当月第一天
        $this->end = !empty($this->post['end']) ? $this->post['end'] : date('Y-m-d'); //默认今天
        $this->start_ts = strtotime($this->start);
        $this->end_ts = strtotime($this->end . ' 23:59:59');
        $this->period = getPeriod($this->start, $this->end);
    }

3、组装图表数据

data 统计每日新增用户量
data2 统计每日累计用户量

$data = $data2 = $this->periodp['data'];
$list = Db::name('user')->whereBetween('createtime', [$this->start_ts, $this->end_ts])->select();
foreach ($add_user_build as $k => $v){
    $date = date('Y-m-d', $v['createtime']);
    $data[$date] += 1;
}
//获取起始增量
$begin = Db::name('user')->where('createtime', '<',$this->start_ts)->count();
$prev = '';
foreach ($day_user_add_data as $k => $v){
    if ($prev == ''){
        $data2[$k] += $begin;
    }else{
        $data2[$k] += $data2[$prev];
    }
    $prev = $k;
}