yii框架结合charjs实现统计30天数据的方法
发布:smiling 来源: PHP粉丝网 添加日期:2022-02-24 08:20:53 浏览: 评论:0
本文实例讲述了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; // 支付总额
Tags: yii统计30天数据 charjs
- 上一篇:yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)