本文实例讲述了yii 框架实现按天,月,年,自定义时间段统计数据的方法。分享给大家供大家参考,具体如下:
天(day): 格式Y-m-d
月(month):格式Y-m
年(year):格式Y
时间段(range): 格式Y-m-d
首先计算时间
天0-23小时
$rangeTime = range(0, 23);
月:1-月底
// $days = cal_days_in_month(CAL_GREGORIAN, $month, $year); $days = date("t",strtotime($year . '-' . $month)); // 生成1-days的天 $rangeTime = range(1, $days);
年:1-12月
$rangeTime = range(1, 12);
时间段;开始时间-结束时间
$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'); }
封装一下
/** * 获取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 ]; }
然后查询数据库
$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();
按时间排列下
$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); }
再按时间获取对应数据
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 "htmlcode">/** * 时间段内支付订单量及金额 * 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 "htmlcode"><div class="clearfix dashboard-time-select"> <div class="time-select"> <div class="row"> <div class="col-lg-2 col-md-2 col-sm-2"> <"col-lg-7 col-md-7 col-sm-7"> <div class="dashboard-time-box"> <div class="dashboard-time-picker dashboard-time-day <"> <"dashboard-time-picker dashboard-time-month <"> <"dashboard-time-picker dashboard-time-year <"> <"dashboard-time-picker dashboard-time-range <"> <div class="row"> <div class="col-lg-6 col-md-6 col-sm-6 range-start"> <"col-lg-6 col-md-6 col-sm-6 range-end"> <"col-lg-2 col-md-2 col-sm-2"> <"htmlcode">$('.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 + '"_blank" href="//www.jb51.net/Special/386.htm">Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
更新日志
2024年11月29日
2024年11月29日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]