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 和 COM
Oct 09 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
Jul 01 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
Jun 25 PHP
php判断表是否存在的方法
Jun 18 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
Oct 16 PHP
php数组函数array_walk用法示例
May 26 PHP
PHP怎样用正则抓取页面中的网址
Aug 09 PHP
php实现数据库的增删改查
Feb 26 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
YII2框架中actions的作用与使用方法示例
Mar 13 PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 16 PHP
php字符串倒叙
Apr 01 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 会话(session 时间设定)使用入门代码
2008/06/05 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
2018/08/21 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
js自定义鼠标右键的实现原理及源码
2014/06/23 Javascript
使用typeof方法判断undefined类型
2014/09/09 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
JQuery DIV 动态隐藏和显示的方法
2016/06/23 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
JQuery样式操作、click事件以及索引值-选项卡应用示例
2019/05/14 jQuery
小程序实现搜索框功能
2020/03/26 Javascript
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
Python制作爬虫抓取美女图
2016/01/20 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
python多任务之协程的使用详解
2019/08/26 Python
高中的自我鉴定
2013/12/16 职场文书
初中数学教学反思
2014/01/16 职场文书
澳大利亚商务邀请函
2014/01/17 职场文书
简历的自我评价
2014/02/03 职场文书
2014年教师节寄语
2014/04/03 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
优秀学生干部事迹材料
2014/12/24 职场文书
邀请函格式范文
2015/02/02 职场文书
会计试用期自我评价
2015/03/10 职场文书
会计求职自荐信
2015/03/26 职场文书
2015安全保卫工作总结
2015/04/25 职场文书
幽灵公主观后感
2015/06/09 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS