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 相关文章推荐
PHP环境搭建最新方法
Sep 05 PHP
PHP面向对象编程快速入门
Dec 14 PHP
php 静态页面中显示动态内容
Aug 14 PHP
php 数组排序 array_multisort与uasort的区别
Mar 24 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
Jun 09 PHP
解析php curl_setopt 函数的相关应用及介绍
Jun 17 PHP
PHP 关于访问控制的和运算符优先级介绍
Jul 08 PHP
PHP5中GD库生成图形验证码(有汉字)
Jul 28 PHP
php解析url并得到url中的参数及获取url参数的四种方式
Oct 26 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
Aug 11 PHP
php外部执行命令函数用法小结
Oct 11 PHP
PHP 中魔术常量的实例详解
Oct 26 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 根据IP地址控制访问的代码
2010/04/22 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
js获取图片长和宽度的代码
2009/11/24 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
javascript实现对话框功能警告(alert 消息对话框)确认(confirm 消息对话框)
2019/05/07 Javascript
微信小程序如何获取用户头像和昵称
2019/09/23 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
JavaScript Tab菜单实现过程解析
2020/05/13 Javascript
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
python 图片验证码代码
2008/12/07 Python
python3使用urllib模块制作网络爬虫
2016/04/08 Python
python如何使用unittest测试接口
2018/04/04 Python
Python绘制频率分布直方图的示例
2019/07/08 Python
Python 堆叠柱状图绘制方法
2019/07/29 Python
Python 中@property的用法详解
2020/01/15 Python
简单了解Python多态与属性运行原理
2020/06/15 Python
Django封装交互接口代码
2020/07/12 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
优秀员工自荐信范文
2013/10/05 职场文书
人事主管的岗位职责
2013/11/16 职场文书
大学生村官心得体会范文
2014/01/04 职场文书
李敖北大演讲稿
2014/05/24 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
个人年终总结范文
2015/03/09 职场文书
2015年人力资源部工作总结
2015/04/30 职场文书
人力资源部工作计划
2019/05/14 职场文书