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中文件上传的安全问题
Oct 09 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 PHP
smarty获得当前url的方法分享
Feb 14 PHP
php生成随机颜色方法汇总
Dec 03 PHP
php短址转换实现方法
Feb 25 PHP
php视频拍照上传头像功能实现代码分享
Oct 08 PHP
php+ajax+json 详解及实例代码
Dec 12 PHP
PHP登录(ajax提交数据和后台校验)实例分享
Dec 29 PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
PHP调用接口API封装的例子
Oct 11 PHP
php pdo连接数据库操作示例
Nov 18 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 ci框架验证码实例分析
2013/06/26 PHP
经常用到的JavasScript事件的翻译
2007/04/09 Javascript
jQuery DOM操作小结与实例
2010/01/07 Javascript
JavaScript类和继承 constructor属性
2010/03/04 Javascript
原生js写的放大镜效果
2012/08/22 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
解决axios post 后端无法接收数据的问题
2019/10/29 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
python中stdout输出不缓存的设置方法
2014/05/29 Python
编写自定义的Django模板加载器的简单示例
2015/07/21 Python
Python Queue模块详细介绍及实例
2016/12/27 Python
基于python时间处理方法(详解)
2017/08/14 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
Python Opencv任意形状目标检测并绘制框图
2019/07/23 Python
Python的几种主动结束程序方式
2019/11/22 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
2016/04/26 HTML / CSS
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
加拿大探亲邀请信
2014/01/28 职场文书
酒店员工检讨书
2014/02/18 职场文书
客户接待方案
2014/02/26 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
体育教师求职信
2014/05/24 职场文书
关于爱国的标语
2014/06/24 职场文书
作风大整顿心得体会
2014/09/10 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
解除同居协议书
2015/01/29 职场文书
2015年语文教研组工作总结
2015/05/23 职场文书
甲午风云观后感
2015/06/02 职场文书
python 判断文件或文件夹是否存在
2022/03/18 Python
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js