laravel实现按时间日期进行分组统计方法示例


Posted in PHP onMarch 23, 2019

按日期进行分组

//统计七天内注册用户数量按天进行分组
$user = DB::table('users')->whereBetween('created_at',['2018-01-01','2018-01-07'])
 ->selectRaw('date(created_at) as date,count(*) as value')
 ->groupBy('date')->get();

#获取的用户分组数据
{
 "date": "2018-01-01", #日期
 "value": 199  #数量
{
 "date": "2018-01-02",
 "value": 298
},
{
 "date": "2018-01-03",
 "value": 1000
}
 
#在进行图表统计的时候直接从数据库取得数据有些日期可能是没有的,就需要我们手动进行补全一些日期
#计算日期内天数
$stimestamp = strtotime($start_time);
$etimestamp = strtotime($end_time);
#计算日期段内有多少天
$days = ($etimestamp - $stimestamp) / 86400;
#保存每天日期
$date = array();
for($i = 0;$i < $days;$i++){
 $date[] = date('Y-m-d', $stimestamp + (86400 * $i));
}
#循环补全日期
foreach ($date as $key => $val){
 $data[$key] = [
 'date' => $val,
 'value' => 0
 ];
 foreach ($user as $item => $value){
 if($val == $value['date']){
  $data[$key] = $value;
 }
 }
}
return $data;

按月份进行分组

#统计一年内注册用户数量按月份进行分组
$user = DB::table('users')->whereBetween('created_at',['2018-01-01','2018-12-31'])
 ->selectRaw('DATE_FORMAT(created_at,"%Y-%m") as date,COUNT(*) as value')
 ->groupBy('date')->get();
#获取的用户分组数据
{
 "date": "2018-01", #月份
 "value": 1497  #数量
},
{
 "date": "2018-02",
 "value": 2354
},
{
 "date": "2018-03",
 "value": 4560
} 
#在进行图表统计的时候直接从数据库取得的数据有的月份可能是没有的,不过月份比较少可直接写死,同样也需要补全
$year = date('Y',time());
#一年的月份
$month = [
 0 => $year.'-01',
 1 => $year.'-02',
 2 => $year.'-03',
 3 => $year.'-04',
 4 => $year.'-05',
 5 => $year.'-06',
 6 => $year.'-07',
 7 => $year.'-08',
 8 => $year.'-09',
 9 => $year.'-10',
 10 => $year.'-11',
 11 => $year.'-12',
];
#循环补全月份
foreach ($month as $key => $val){
 $data[$key] = [
 'date' => $val,
 'value' => 0
 ];
 foreach ($user as $item => $value){
 if($val == $value['date']){
  $data[$key] = $value;
 }
 }
}
return $data;

laravel实现各时间段数量统计、方便直接使用

因项目中用到了图表之类的信息,需要获取到很多时间的数据动态,刚开始我都是自己换算时间来计算,后来 看到手册中有更简单的方法,自己总结了一下通用的时间段统计(今天、昨天、上周、本周、上月、本月、上年、本年)。

use Carbon\Carbon;
 
public function getNumber()
{
  $data = [];

  #今天数据
  $data['customer_today'] = Customer::where('customer_type', 1)->where('created_at', Carbon::today())->count();
  #昨天数据
  $data['customer_yesterday'] = Customer::where('customer_type', 1)->where('created_at', Carbon::yesterday())->count();

  // 本周数据
  $this_week = [Carbon::now()->startOfWeek(), Carbon::now()->endOfWeek()];
  $data['customer_this_week'] = Customer::where('customer_type', 1)->whereBetween('created_at', $this_week)->count();

  // 上周数据
  $last_week = [Carbon::now()->startOfWeek()->subWeek(), Carbon::now()->endOfWeek()->subWeek()];
  $data['customer_last_week'] = Customer::where('customer_type', 1)->whereBetween('created_at', $last_week)->count();

  // 本月数据
  $data['customer_this_month'] = Customer::where('customer_type', 1)->whereMonth('created_at', Carbon::now()->month)->count();

  // 上月数据
  $data['customer_last_month'] = Customer::where('customer_type', 1)->whereMonth('created_at', Carbon::now()->subMonth()->month)->count();

  // 本年数据
  $data['customer_this_year'] = Customer::where('customer_type', 1)->whereYear('created_at', Carbon::now()->year)->count();

  
  return $data;
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
PHP程序员编程注意事项
Apr 10 PHP
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
php重定向的三种方法分享
Feb 22 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
如何在php中正确的使用json
Aug 06 PHP
PHP mail()函数使用及配置方法
Jan 14 PHP
PHP IDE phpstorm 常用快捷键
May 18 PHP
php单一接口的实现方法
Jun 20 PHP
php版微信小店调用api示例代码
Nov 12 PHP
PHP PDOStatement::setAttribute讲解
Feb 01 PHP
深入学习微信网址链接解封的防封原理visit_type
Aug 15 PHP
PHP使用OB缓存实现静态化功能示例
Mar 23 #PHP
Laravel如何自定义command命令浅析
Mar 23 #PHP
PHP使用mysqli同时执行多条sql查询语句的实例
Mar 22 #PHP
PHP中命名空间的使用例子
Mar 22 #PHP
PHP SESSION机制的理解与实例
Mar 22 #PHP
PHP析构函数destruct与垃圾回收机制的讲解
Mar 22 #PHP
PHP中的empty、isset、isnull的区别与使用实例
Mar 22 #PHP
You might like
十天学会php之第六天
2006/10/09 PHP
php 伪造本地文件包含漏洞的代码
2011/11/03 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
PHP获取音频文件的相关信息
2015/06/22 PHP
PHP实现阿里大鱼短信验证的实例代码
2017/07/10 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
增强的 JavaScript 的 trim 函数的代码
2007/08/13 Javascript
javascript 表单的友好用户体现
2009/01/07 Javascript
JavaScript 权威指南(第四版) 读书笔记
2009/08/11 Javascript
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
jquery使用remove()方法删除指定class子元素
2015/03/26 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
js 性能优化之快速响应的用户界面
2017/02/15 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
Python获取系统默认字符编码的方法
2015/06/04 Python
Python字符串处理实现单词反转
2017/06/14 Python
python配置文件写入过程详解
2019/10/19 Python
如何使用python切换hosts文件
2020/04/29 Python
Python如何执行系统命令
2020/09/23 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
CSS3制作翻转效果_动力节点Java学院整理
2017/07/11 HTML / CSS
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
生日邀请函范文
2014/01/13 职场文书
乡镇党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
未婚证明书模板
2014/10/08 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
opencv读取视频并保存图像的方法
2021/06/04 Python
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js