yii框架结合charjs实现统计30天数据的方法


Posted in PHP onApril 04, 2020

本文实例讲述了yii框架结合charjs实现统计30天数据的方法。分享给大家供大家参考,具体如下:

理论上30天数据应该都有,但实际上却不一定是,所以需要补全

public static function getDayOrderCharData($days = 30) {
    $nowDay = date('Y-m-d', strtotime('-1day')); // 当前前一天
    $lastDay = date("Y-m-d", strtotime('-'.$days.'day')); // days天前
    $daysFormat = [];
    // 获取到days段的日期
    for($i = $days; $i > 0; $i--) {
      $daysFormat[] = date("Y-m-d", strtotime('-'.$i.'day'));
    }
 
    // 所有用户
    $allOrderData = self::find()
            ->select(['FROM_UNIXTIME(create_at,"%Y-%m-%d") as char_time', 'COUNT(id) as total_order', 'SUM(order_amount) as total_order_amount', 'SUM(pay_amount) as total_order_pay_amount'])
            ->where(['>=', 'FROM_UNIXTIME(create_at,"%Y-%m-%d")', $lastDay])
            ->andWhere(['<=', 'FROM_UNIXTIME(create_at,"%Y-%m-%d")', $nowDay])
            ->groupBy('char_time')
            ->all();
    $dayCountTitle   = Yii::t('backend', 'day_order_count_title', ['last_day' => $lastDay, 'now_day' => $nowDay]);
    $dayAmountTitle  = Yii::t('backend', 'day_order_amount_title', ['last_day' => $lastDay, 'now_day' => $nowDay]);
 
    $labels = $daysFormat;
    // 所有用户
    $orderCounts = []; // 订单数量
    $orderAmounts = []; // 订单金额
    $orderPayAmounts = []; // 支付金额
    $allOrderDataArr = [];
    foreach($allOrderData as $allKey => $allVal) {
      $allOrderDataArr[$allVal->char_time]['char_time'] = $allVal->char_time;
      $allOrderDataArr[$allVal->char_time]['total_order'] = $allVal->total_order;
      $allOrderDataArr[$allVal->char_time]['total_order_amount'] = $allVal->total_order_amount;
      $allOrderDataArr[$allVal->char_time]['total_order_pay_amount'] = $allVal->total_order_pay_amount;
    }
 
    foreach($daysFormat as $key => $val) {
      if(array_key_exists($val, $allOrderDataArr)) {
        $orderCounts[] = $allOrderDataArr[$val]['total_order'];
        $orderAmounts[] = $allOrderDataArr[$val]['total_order_amount'];
        $orderPayAmounts[] = $allOrderDataArr[$val]['total_order_pay_amount'];
      } else {
        $orderCounts[] = '0';
        $orderAmounts[] = '0';
        $orderPayAmounts[] = '0';
      }
    }
    $data = [
      'dayCountTitle'    => $dayCountTitle, 
      'dayAmountTitle'    => $dayAmountTitle,
      'orderCountLabel'   => Yii::t('backend', 'day_order_count_label', ['days' => $days]),
      'orderAmountLabel'   => Yii::t('backend', 'day_order_amount_label', ['days' => $days]),
      'orderPayAmountLabel' => Yii::t('backend', 'day_order_pay_amount_label', ['days' => $days]),
      'nowDay'        => $nowDay,
      'lastDay'       => $lastDay,
      'labels'        => $labels,
      'orderCounts'     => $orderCounts,
      'orderAmounts'     => $orderAmounts,
      'orderPayAmounts'   => $orderPayAmounts
    ];
    return $data;
  }

js

// 按天获取订单数量
  var dayOrderCountChartCanvas = $('#dayOrderCountChart').get(0).getContext('2d')
  var dayOrderCountChartData = {
   labels : <?= json_encode($dayOrderChar['labels'], true) ?>,
   datasets: [
    {
     label        : '<?= $dayOrderChar['orderCountLabel'] ?>',
     backgroundColor   : 'rgba(0, 192, 293, 0.5)',
     data        : <?= json_encode($dayOrderChar['orderCounts'], true) ?>
    }
   ]
  }
 
  var dayOrderCountChartOptions = {
    scales: {
      xAxes: [{
        gridLines: {
          display: false
        }
      }],
      yAxes: [{
        gridLines: {
          display: false
        }
      }]
    }
  }
 
  var dayOrderCountChart = new Chart(dayOrderCountChartCanvas, {
    type: 'line',
    data: dayOrderCountChartData,
    options: dayOrderCountChartOptions
  });
 
  // 按天获取订单及金额
  var dayOrderAmounCanvas = $('#dayOrderAmountChart').get(0).getContext('2d')
  var dayOrderAmounData = {
   labels : <?= json_encode($dayOrderChar['labels'], true) ?>,
   datasets: [
    {
     label        : '<?= $dayOrderChar['orderAmountLabel'] ?>',
     backgroundColor   : 'rgba(0, 192, 293, 0.5)',
     data        : <?= json_encode($dayOrderChar['orderAmounts'], true) ?>
    },
    {
     label        : '<?= $dayOrderChar['orderPayAmountLabel'] ?>',
     backgroundColor   : 'rgba(0, 166, 90, 0.5)',
     data        : <?= json_encode($dayOrderChar['orderPayAmounts'], true) ?>
    }
   ]
  }
 
  var dayOrderAmounOptions = {
    scales: {
      xAxes: [{
        gridLines: {
          display: false
        }
      }],
      yAxes: [{
        gridLines: {
          display: false
        }
      }]
    }
  }
 
  var dayOrderAmountChart = new Chart(dayOrderAmounCanvas, {
    type: 'line',
    data: dayOrderAmounData,
    options: dayOrderAmounOptions
  });

记住,yii的as一定要在模型利定义公用变量

public $char_time; // 按时间统计
  public $total_order; // 所有订单
  public $total_order_amount; // 所有订单总额
  public $total_pay_order; // 支付订单
  public $total_pay_amount; // 支付订单总额
  public $total_order_pay_amount; // 支付总额

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php 无极分类(递归)实现代码
Jan 05 PHP
php文章内容分页并生成相应的htm静态页面代码
Jun 07 PHP
关于js与php互相传值的介绍
Jun 25 PHP
浅析php过滤html字符串,防止SQL注入的方法
Jul 02 PHP
php基于base64解码图片与加密图片还原实例
Nov 03 PHP
php中file_exists函数使用详解
May 08 PHP
PHP微信支付实例解析
Jul 22 PHP
PHP实现文件上传下载实例
Oct 18 PHP
PHP使用curl制作简易百度搜索
Nov 03 PHP
curl 出现错误的调试方法(必看)
Feb 13 PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 PHP
php数值计算num类简单操作示例
May 15 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 #PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 #PHP
phpQuery采集网页实现代码实例
Apr 02 #PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 #PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 #PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 #PHP
TP5框架实现上传多张图片的方法分析
Mar 29 #PHP
You might like
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
php 字符串函数收集
2010/03/29 PHP
Look And Say 序列php实现代码
2011/05/22 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
window.parent调用父框架时 ie跟火狐不兼容问题
2009/07/30 Javascript
JS 面向对象之神奇的prototype
2011/02/26 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
javascript闭包入门示例
2014/04/30 Javascript
22点关于jquery性能优化的建议
2014/05/28 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
浅谈layui 表单元素的选中问题
2019/10/25 Javascript
微信小程序点击view动态添加样式过程解析
2020/01/21 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
vue离开当前页面触发的函数代码
2020/09/01 Javascript
Python中join和split用法实例
2015/04/14 Python
详解 Python 读写XML文件的实例
2017/08/02 Python
python实现数据写入excel表格
2018/03/25 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
python实现支付宝转账接口
2019/05/07 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
如何编写python的daemon程序
2021/01/07 Python
python 逆向爬虫正确调用 JAR 加密逻辑
2021/01/12 Python
使用css创建三角形 使用CSS3创建3d四面体原理及代码(html5实践)
2013/01/06 HTML / CSS
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
一道Delphi上机题
2012/06/04 面试题
工商学院毕业生个人自我评价
2013/09/19 职场文书
小学教育毕业生自荐信
2013/11/18 职场文书
战略合作意向书
2014/07/29 职场文书
后勤工作个人总结
2015/02/28 职场文书