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 相关文章推荐
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
Mar 15 PHP
php实现的ping端口函数实例
Nov 12 PHP
php创建、获取cookie及基础要点分析
Jan 26 PHP
使用GD库生成带阴影文字的图片
Mar 27 PHP
php版微信公众平台开发之验证步骤实例详解
Sep 23 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
Oct 10 PHP
php 解决扫描二维码下载跳转问题
Jan 13 PHP
Laravel中前端js上传图片到七牛云的示例代码
Sep 04 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
Sep 18 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
Dec 31 PHP
PHP重载基础知识回顾
Sep 10 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执行定时任务的实现思路
2015/12/21 PHP
php微信开发之图片回复功能
2018/06/14 PHP
[原创]保存的js无法执行的解决办法
2007/02/25 Javascript
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
JavaScript中的集合及效率
2010/01/08 Javascript
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
2012/03/01 Javascript
jquery $.ajax相关用法分享
2012/03/16 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
微信小程序 视图容器组件的详解及实例代码
2017/01/19 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
template.js前端模板引擎使用详解
2017/10/10 Javascript
AngularJS select加载数据选中默认值的方法
2018/02/28 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
Element-ui中元素滚动时el-option超出元素区域的问题
2019/05/30 Javascript
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
JavaScript代码实现简单计算器
2020/12/27 Javascript
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
wxPython学习之主框架实例
2014/09/28 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
Python中的if、else、elif语句用法简明讲解
2016/03/11 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
代码中finally中的代码会不会执行
2012/02/06 面试题
JSP&Servlet技术面试题
2015/05/21 面试题
自荐信的禁忌和要点
2013/10/15 职场文书
护士辞职信范文
2014/01/19 职场文书
通用自荐信范文
2014/03/14 职场文书
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL