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 相关文章推荐
玩转图像函数库―常见图形操作
Sep 03 PHP
浅谈PHP语法(1)
Oct 09 PHP
文章推荐系统(三)
Oct 09 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
Dec 11 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
Apr 24 PHP
50个PHP程序性能优化的方法
Jun 02 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
Nov 22 PHP
php数组冒泡排序算法实例
May 06 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
Oct 11 PHP
laravel中的一些简单实用功能
Nov 03 PHP
一次因composer错误使用引发的问题与解决
Mar 06 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
Jun 13 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
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
php随机显示图片的简单示例
2014/02/15 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
2016/02/26 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
jQuery 白痴级入门教程
2009/11/11 Javascript
有趣的JavaScript数组长度问题代码说明
2011/01/20 Javascript
JavaScript中把数字转换为字符串的程序代码
2013/06/19 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
浅析JavaScript中的隐式类型转换
2013/12/05 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
2018/01/12 Javascript
在 webpack 中使用 ECharts的实例详解
2018/02/05 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
2019/04/14 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
vue+layui实现select动态加载后台数据的例子
2019/09/20 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
使用C语言来扩展Python程序和Zope服务器的教程
2015/04/14 Python
Python实现屏幕截图的两种方式
2018/02/05 Python
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
深入理解Python异常处理的哲学
2019/02/01 Python
Python中函数的返回值示例浅析
2019/08/28 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
教育学专业毕业生的自我评价
2013/11/21 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
初中英语教师个人工作总结2015
2015/07/21 职场文书
详解Flask开发技巧之异常处理
2021/06/15 Python