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 获取当前访问的url文件名的方法小结
Feb 08 PHP
PHP 开发环境配置(Zend Studio)
Apr 28 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
Dec 16 PHP
PHP实现仿Google分页效果的分页函数
Jul 29 PHP
CI框架文件上传类及图像处理类用法分析
May 18 PHP
php 流程控制switch的简单实例
Jun 07 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
详解提高使用Java反射的效率方法
Apr 29 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 PHP
laravel使用数据库测试注意事项
Apr 10 PHP
Thinkphp 框架扩展之驱动扩展实例分析
Apr 27 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
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
JavaScript动态修改弹出窗口大小的方法
2015/04/06 Javascript
详解如何在angular2中获取节点
2017/11/23 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
JavaScript变量作用域及内存问题实例分析
2019/06/10 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
[13:39]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第一场
2014/05/26 DOTA
python实现图片变亮或者变暗的方法
2015/06/01 Python
python生成IP段的方法
2015/07/07 Python
对pandas的算术运算和数据对齐实例详解
2018/12/22 Python
Python 日期区间处理 (本周本月上周上月...)
2019/08/08 Python
python写一个随机点名软件的实例
2019/11/28 Python
python dumps和loads区别详解
2020/02/04 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
普通大学毕业生自荐信
2013/11/04 职场文书
2014年学前班工作总结
2014/12/08 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
红色影片观后感
2015/06/18 职场文书
会议承办单位欢迎词
2019/07/09 职场文书
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js
Java实现扫雷游戏详细代码讲解
2022/05/25 Java/Android
Golang gRPC HTTP协议转换示例
2022/06/16 Golang