gpt4 book ai didi

yii 框架实现按天,月,年,自定义时间段统计数据的方法分析

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章yii 框架实现按天,月,年,自定义时间段统计数据的方法分析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了yii 框架实现按天,月,年,自定义时间段统计数据的方法。分享给大家供大家参考,具体如下:

天(day): 格式Y-m-d 。

月(month):格式Y-m 。

年(year):格式Y 。

时间段(range): 格式Y-m-d 。

首先计算时间 。

天0-23小时 。

?
1
$rangeTime = range(0, 23);

月:1-月底 。

?
1
2
3
4
// $days = cal_days_in_month(CAL_GREGORIAN, $month, $year);
$days = date ( "t" , strtotime ( $year . '-' . $month ));
// 生成1-days的天
$rangeTime = range(1, $days );

年:1-12月 。

?
1
$rangeTime = range(1, 12);

时间段;开始时间-结束时间 。

?
1
2
3
4
5
6
7
8
9
10
$stimestamp = strtotime ( $time );
$etimestamp = strtotime ( $time2 );
// 计算日期段内有多少天
$days = ( $etimestamp - $stimestamp ) / 86400 + 1;
// 保存每天日期
for ( $i = 0; $i < $days ; $i ++){
   $newTimeStamp = $stimestamp + (86400 * $i );
   $rangeTime [] = date ( 'Y-m-d' , $newTimeStamp );
   $labels [] = date ( 'd' , $newTimeStamp ) . Yii::t( 'backend' , 'day' );
}

封装一下 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/**
    * 获取label和时间段
    * type: day, month, year, range
    * time: 日期; day为具体的天y-m-d, month为具体的月y-m, year为具体的年y
    * time2 日期, 时间段的第二个时间
    */
   public function getLabelAndRangeTime( $type , $time , $time2 ) {
     if ( empty ( $time )) {
       $time = date ( 'Y-m-d' , time());
     }
 
     $labels = [];
     $rangeTime = [];
 
     if ( $type == 'day' ) {
       // 生成1-24小时
       $rangeTime = range(0, 23);
       foreach ( $rangeTime as $key => $val ) {
         $label = $val . Yii::t( 'backend' , 'hour' );
         $labels [] = $label ;
       }
     } else if ( $type == 'month' ) {
       $dateArr = explode ( '-' , $time );
       if ( count ( $dateArr > 1)) {
         $year = $dateArr [0];
         $month = $dateArr [1];
         $time = $year ;
         $time2 = $month ;
         // 获取当前年月的天数
         // $days = cal_days_in_month(CAL_GREGORIAN, $month, $year);
         $days = date ( "t" , strtotime ( $year . '-' . $month ));
         // 生成1-days的天
         $rangeTime = range(1, $days );
 
         foreach ( $rangeTime as $key => $val ) {
           $label = $val . Yii::t( 'backend' , 'day' );
           $labels [] = $label ;
         }
       }
     } else if ( $type == 'year' ) {
       // 生成1-12月
       $rangeTime = range(1, 12);
       foreach ( $rangeTime as $key => $val ) {
         $label = $val . Yii::t( 'backend' , 'month' );
         $labels [] = $label ;
       }
     } else if ( $type == 'range' ) {
       $stimestamp = strtotime ( $time );
       $etimestamp = strtotime ( $time2 );
       // 计算日期段内有多少天
       $days = ( $etimestamp - $stimestamp ) / 86400 + 1;
       // 保存每天日期
       for ( $i = 0; $i < $days ; $i ++){
         $newTimeStamp = $stimestamp + (86400 * $i );
         $rangeTime [] = date ( 'Y-m-d' , $newTimeStamp );
         $labels [] = date ( 'd' , $newTimeStamp ) . Yii::t( 'backend' , 'day' );
       }
     }
 
    
     return [
       'type'   => $type ,
       'time'   => $time ,
       'time2'   => $time2 ,
       'rangeTime' => $rangeTime ,
       'labels'  => $labels
     ];
   }

然后查询数据库 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$query = Order::find();
     if ( $type == 'day' ) {
       $query = $query ->select([ 'FROM_UNIXTIME(pay_at,"%Y-%m-%d %H") as char_time' , 'COUNT(id) as total_order' , 'SUM(pay_amount) as total_order_amount' ])
             ->where([ 'FROM_UNIXTIME(pay_at,"%Y-%m-%d")' => $time ]);
     } else if ( $type == 'month' ) {
       $query = $query ->select([ 'FROM_UNIXTIME(pay_at,"%Y-%m-%d") as char_time' , 'COUNT(id) as total_order' , 'SUM(pay_amount) as total_order_amount' ])
             ->where([ 'FROM_UNIXTIME(pay_at,"%Y-%m")' => ( $time . '-' . $time2 )]);
     } else if ( $type == 'year' ) {
       $query = $query ->select([ 'FROM_UNIXTIME(pay_at,"%Y-%m") as char_time' , 'COUNT(id) as total_order' , 'SUM(pay_amount) as total_order_amount' ])
             ->where([ 'FROM_UNIXTIME(pay_at,"%Y")' => $time ]);
     } else if ( $type == 'range' ) {
       $query = $query ->select([ 'FROM_UNIXTIME(pay_at,"%Y-%m-%d") as char_time' , 'COUNT(id) as total_order' , 'SUM(pay_amount) as total_order_amount' ])
             ->where([ 'between' , 'FROM_UNIXTIME(pay_at,"%Y-%m-%d")' , $time , $time2 ]);
     }
     $data = $query ->andWhere([ 'pay_status' => 2])->groupBy( 'char_time' )->all();

按时间排列下 。

?
1
2
3
4
5
6
$dataArr = [];
foreach ( $data as $allKey => $allVal ) {
       $dataArr [ $allVal ->char_time][ 'char_time' ] = $allVal ->char_time;
       $dataArr [ $allVal ->char_time][ 'total_order' ] = $allVal ->total_order;
       $dataArr [ $allVal ->char_time][ 'total_order_amount' ] = bcdiv ( $allVal ->total_order_amount, 100, 2);
}

再按时间获取对应数据 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
foreach ( $rangeTime as $key => $val ) {
       if ( $type == 'range' ) {
         if ( array_key_exists ( $val , $dataArr )) {
           $charCountDatas [] = $dataArr [ $val ][ 'total_order' ];
           $charAmountDatas [] = $dataArr [ $val ][ 'total_order_amount' ];
         } else {
           $charCountDatas [] = 0;
           $charAmountDatas [] = 0;
         }
       } else {
         $theNow = strlen ( $val ) == 2 ? $val : '0' . $val ;
 
         if ( $type == 'day' ) {
           $theTime = $time . ' ' . $theNow ;
         } else if ( $type == 'month' ) {
           $theTime = $time . '-' . $time2 . '-' . $theNow ;
         } else if ( $type == 'year' ) {
           $theTime = $time . '-' . $theNow ;
         }
 
         if ( array_key_exists ( $theTime , $dataArr )) {
           $charCountDatas [] = $dataArr [ $theTime ][ 'total_order' ];
           $charAmountDatas [] = $dataArr [ $theTime ][ 'total_order_amount' ];
         } else {
           $charCountDatas [] = 0;
           $charAmountDatas [] = 0;
         }
       }
     }

封装下 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/**
    * 时间段内支付订单量及金额
    * type 类型: day, month, year
    * time: 时间, day: 选择的时间; month: 表示年;year: 表示年; range: 第一个时间
    * time2: 时间: day: ''; month: 表示月;year: ''; range: 第二个时间
    * rangeTime 时间段 day: 1-24小时; month: 1-30天; year:1-12月,range: time和time2之间的天
    */
   public function getDayOrderPayChar( $type , $time , $time2 , $rangeTime ) {
     $query = Order::find();
     if ( $type == 'day' ) {
       $query = $query ->select([ 'FROM_UNIXTIME(pay_at,"%Y-%m-%d %H") as char_time' , 'COUNT(id) as total_order' , 'SUM(pay_amount) as total_order_amount' ])
             ->where([ 'FROM_UNIXTIME(pay_at,"%Y-%m-%d")' => $time ]);
     } else if ( $type == 'month' ) {
       $query = $query ->select([ 'FROM_UNIXTIME(pay_at,"%Y-%m-%d") as char_time' , 'COUNT(id) as total_order' , 'SUM(pay_amount) as total_order_amount' ])
             ->where([ 'FROM_UNIXTIME(pay_at,"%Y-%m")' => ( $time . '-' . $time2 )]);
     } else if ( $type == 'year' ) {
       $query = $query ->select([ 'FROM_UNIXTIME(pay_at,"%Y-%m") as char_time' , 'COUNT(id) as total_order' , 'SUM(pay_amount) as total_order_amount' ])
             ->where([ 'FROM_UNIXTIME(pay_at,"%Y")' => $time ]);
     } else if ( $type == 'range' ) {
       $query = $query ->select([ 'FROM_UNIXTIME(pay_at,"%Y-%m-%d") as char_time' , 'COUNT(id) as total_order' , 'SUM(pay_amount) as total_order_amount' ])
             ->where([ '>=' , 'FROM_UNIXTIME(pay_at,"%Y-%m-%d")' , $time ])
             ->andWhere([ '<=' , 'FROM_UNIXTIME(pay_at,"%Y-%m-%d")' , $time2 ]);
     }
     $data = $query ->andWhere([ 'pay_status' => 2])->groupBy( 'char_time' )->all();
 
 
     $dataArr = [];
     foreach ( $data as $allKey => $allVal ) {
       $dataArr [ $allVal ->char_time][ 'char_time' ] = $allVal ->char_time;
       $dataArr [ $allVal ->char_time][ 'total_order' ] = $allVal ->total_order;
       $dataArr [ $allVal ->char_time][ 'total_order_amount' ] = bcdiv ( $allVal ->total_order_amount, 100, 2);
     }
 
     $charCountDatas = [];
     $charAmountDatas = [];
     foreach ( $rangeTime as $key => $val ) {
       if ( $type == 'range' ) {
         if ( array_key_exists ( $val , $dataArr )) {
           $charCountDatas [] = $dataArr [ $val ][ 'total_order' ];
           $charAmountDatas [] = $dataArr [ $val ][ 'total_order_amount' ];
         } else {
           $charCountDatas [] = 0;
           $charAmountDatas [] = 0;
         }
       } else {
         $theNow = strlen ( $val ) == 2 ? $val : '0' . $val ;
 
         if ( $type == 'day' ) {
           $theTime = $time . ' ' . $theNow ;
         } else if ( $type == 'month' ) {
           $theTime = $time . '-' . $time2 . '-' . $theNow ;
         } else if ( $type == 'year' ) {
           $theTime = $time . '-' . $theNow ;
         }
 
         if ( array_key_exists ( $theTime , $dataArr )) {
           $charCountDatas [] = $dataArr [ $theTime ][ 'total_order' ];
           $charAmountDatas [] = $dataArr [ $theTime ][ 'total_order_amount' ];
         } else {
           $charCountDatas [] = 0;
           $charAmountDatas [] = 0;
         }
       }
     }
 
     $res = [
       'count' => [
         'name' => Yii::t( 'backend' , 'hour_order_pay_count_title' ),
         'color' => '#99CC33' ,
         'charData' => $charCountDatas
       ],
       'amount' => [
         'name' => Yii::t( 'backend' , 'hour_order_pay_amount_title' ),
         'color' => '#99CC33' ,
         'charData' => $charAmountDatas
       ]
       ];
 
     return $res ;
   }

前端 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<div class = "clearfix dashboard-time-select" >
   <div class = "time-select" >
     <div class = "row" >
       <div class = "col-lg-2 col-md-2 col-sm-2" >
       <?= Html::dropDownList( 'day_type' , $type , [ 'day' => Yii::t( 'backend' , 'day' ), 'month' => Yii::t( 'backend' , 'month' ), 'year' => Yii::t( 'backend' , 'year' ), 'range' => Yii::t( 'backend' , 'range_time' )], [ 'class' => 'type dashboard-time-type' ]) ?>
       </div>
       <div class = "col-lg-7 col-md-7 col-sm-7" >
         <div class = "dashboard-time-box" >
           <div class = "dashboard-time-picker dashboard-time-day <?= ($type == 'day') ? '' : 'hide' ;?>" >
             <?= DateTimePicker::widget([
               'name' => 'time' ,
               'value' => (! empty ( $time ) && $type == 'day' ) ? $time : '' ,
               'options' => [ 'placeholder' => Yii::t( 'backend' , 'date' ), 'autocomplete' => 'off' , 'class' => 'time' ],
               'removeButton' => false,
               'pluginOptions' => [
                 'format' => 'yyyy-mm-dd' ,
                 'startView' => 'month' ,
                 'minView' => 'month' ,
                 'maxView' => 'month' ,
                 'autoclose' => true
               ]
             ]) ?>
           </div>
           <div class = "dashboard-time-picker dashboard-time-month <?= ($type == 'month') ? '' : 'hide' ;?>" >
             <?= DateTimePicker::widget([
               'name' => 'time' ,
               'value' => (! empty ( $time ) && $type == 'month' ) ? $time : '' ,
               'options' => [ 'placeholder' => Yii::t( 'backend' , 'date' ), 'autocomplete' => 'off' , 'class' => 'time' ],
               'removeButton' => false,
               'pluginOptions' => [
                 'format' => 'yyyy-mm' ,
                 'startView' => 'year' ,
                 'minView' => 'year' ,
                 'maxView' => 'year' ,
                 'autoclose' => true
               ]
             ]) ?>
           </div>
           <div class = "dashboard-time-picker dashboard-time-year <?= ($type == 'year') ? '' : 'hide' ;?>" >
             <?= DateTimePicker::widget([
               'name' => 'time' ,
               'value' => (! empty ( $time ) && $type == 'year' ) ? $time : '' ,
               'options' => [ 'placeholder' => Yii::t( 'backend' , 'date' ), 'autocomplete' => 'off' , 'class' => 'time' ],
               'removeButton' => false,
               'pluginOptions' => [
                 'format' => 'yyyy' ,
                 'startView' => 'decade' ,
                 'minView' => 'decade' ,
                 'maxView' => 'decade' ,
                 'autoclose' => true
               ]
             ]) ?>
           </div>
           <div class = "dashboard-time-picker dashboard-time-range <?= ($type == 'range') ? '' : 'hide' ;?>" >
             <div class = "row" >
               <div class = "col-lg-6 col-md-6 col-sm-6 range-start" >
                 <?= DateTimePicker::widget([
                   'name' => 'time' ,
                   'value' => (! empty ( $time ) && $type == 'range' ) ? $time : '' ,
                   'options' => [ 'placeholder' => Yii::t( 'backend' , 'date' ), 'autocomplete' => 'off' , 'class' => 'time time2' ],
                   'removeButton' => false,
                   'pluginOptions' => [
                     'format' => 'yyyy-mm-dd' ,
                     'startView' => 'month' ,
                     'minView' => 'month' ,
                     'maxView' => 'month' ,
                     'autoclose' => true
                   ]
                 ]) ?>
               </div>
               <div class = "col-lg-6 col-md-6 col-sm-6 range-end" >
                 <?= DateTimePicker::widget([
                   'name' => 'time2' ,
                   'value' => (! empty ( $time2 ) && $type == 'range' ) ? $time2 : '' ,
                   'options' => [ 'placeholder' => Yii::t( 'backend' , 'date' ), 'autocomplete' => 'off' , 'class' => 'time time2' ],
                   'removeButton' => false,
                   'pluginOptions' => [
                     'format' => 'yyyy-mm-dd' ,
                     'startView' => 'month' ,
                     'minView' => 'month' ,
                     'maxView' => 'month' ,
                     'autoclose' => true
                   ]
                 ]) ?>
               </div>
             </div>
           </div>
         </div>
      
       </div>
       <div class = "col-lg-2 col-md-2 col-sm-2" >
       <?= Html::button(Yii::t( 'backend' , 'sure' ), [ 'class' => 'btn btn-success btn-dashboard-time' , 'data-url' => $url ]) ?>
       </div>
     </div>
   </div>
</div>

确认按钮 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$( '.dashboard-time-select .btn-dashboard-time' ).click( function () {
     var url = $( this ).attr( 'data-url' );
     var timeSelect = $( this ).parent().parent();
     var type = timeSelect.find( '.type' ).val();
     var time = '' ;
     var time2 = '' ;
     if (type == 'day' ) {
       time = timeSelect.find( '.dashboard-time-day input' ).val();
     } else if (type == 'month' ) {
       time = timeSelect.find( '.dashboard-time-month input' ).val();
     } else if (type == 'year' ) {
       time = timeSelect.find( '.dashboard-time-year input' ).val();
     } else if (type == 'range' ) {
       time = timeSelect.find( '.dashboard-time-range .range-start input' ).val();
       time2 = timeSelect.find( '.dashboard-time-range .range-end input' ).val();
     }
     window.location.href = baseBackend + '/' + url + '?type=' + type + '&time=' + time + '&time2=' + time2
   })
   $( '.dashboard-time-select .dashboard-time-type' ).change( function () {
     var type = $( this ).val();
     $( '.dashboard-time-select .dashboard-time-picker' ).addClass( 'hide' );
     $( '.dashboard-time-select .dashboard-time-' + type).removeClass( 'hide' );
   })

  。

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

原文链接:https://blog.csdn.net/tang05709/article/details/103803752 。

最后此篇关于yii 框架实现按天,月,年,自定义时间段统计数据的方法分析的文章就讲到这里了,如果你想了解更多关于yii 框架实现按天,月,年,自定义时间段统计数据的方法分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com