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正则校验用户名介绍
Jul 19 PHP
PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
Jan 30 PHP
php实现的一个很好用HTML解析器类可用于采集数据
Sep 23 PHP
PHP导入导出Excel代码
Jul 07 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
Sep 25 PHP
WordPress中获取指定分类及其子分类下的文章数目
Dec 31 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
Mar 14 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
Feb 09 PHP
PHP中快速生成随机密码的几种方式
Apr 17 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
Jun 06 PHP
PHP智能识别收货地址信息实例
Jan 05 PHP
PHP常用的类封装小结【4个工具类】
Jun 28 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
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
Javascript 布尔型分析
2008/12/22 Javascript
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
2009/02/18 Javascript
jquery.AutoComplete.js中文修正版(支持firefox)
2010/04/09 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
2014/05/11 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
angular forEach方法遍历源码解读
2017/01/25 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
2017/05/22 Javascript
webpack构建vue项目的详细教程(配置篇)
2017/07/17 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
Python struct模块解析
2014/06/12 Python
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
分享Python字符串关键点
2015/12/13 Python
Python实现批量检测HTTP服务的状态
2016/10/27 Python
pandas把dataframe转成Series,改变列中值的类型方法
2018/04/10 Python
python文本数据处理学习笔记详解
2019/06/17 Python
python绘制高斯曲线
2021/02/19 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
英国买鞋网站:Charles Clinkard
2019/11/14 全球购物
Linux文件操作命令都有哪些
2015/02/27 面试题
手机被没收检讨书
2014/02/22 职场文书
中学清明节活动总结
2014/07/04 职场文书
党员学习群众路线心得体会
2014/11/04 职场文书
2014年安置帮教工作总结
2014/12/11 职场文书
2014大学生学生会工作总结
2014/12/19 职场文书
体育教师教学随笔
2015/08/15 职场文书
创业计划书之牛肉汤快餐店
2019/10/08 职场文书