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(3) php 函数
Feb 15 PHP
php 判断数组是几维数组
Mar 20 PHP
基于PHP读取csv文件内容的详解
Jun 18 PHP
使用PHP接收POST数据,解析json数据
Jun 28 PHP
php实现的click captcha点击验证码类实例
Sep 23 PHP
在PHP程序中使用Rust扩展的方法
Jul 03 PHP
再推荐十款免费的php开发工具
Nov 09 PHP
Yii2简单实现给表单添加验证码的方法
Jul 18 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
PHP命名空间与自动加载类详解
Sep 04 PHP
简单实用的PHP文本缓存类实例
Mar 22 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
Oct 20 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
php读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
sql注入与转义的php函数代码
2013/06/17 PHP
jQuery $.each的用法说明
2010/03/22 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
javascript表单事件处理方法详解
2016/05/15 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
JS实现指定区域的全屏显示功能示例
2019/04/25 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
python3实现ftp服务功能(客户端)
2017/03/24 Python
Python中Django发送带图片和附件的邮件
2017/03/31 Python
Python标准模块--ContextManager上下文管理器的具体用法
2017/11/27 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
python导入模块交叉引用的方法
2019/01/19 Python
Elasticsearch py客户端库安装及使用方法解析
2020/09/14 Python
python实现经典排序算法的示例代码
2021/02/07 Python
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
市场安全管理制度
2014/01/26 职场文书
村干部培训班主持词
2014/03/28 职场文书
爱心募捐感谢信
2015/01/22 职场文书
Python Django搭建文件下载服务器的实现
2021/05/10 Python
python opencv旋转图片的使用方法
2021/06/04 Python