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 相关文章推荐
一个简洁的多级别论坛
Oct 09 PHP
从网上搜到的phpwind 0day的代码
Dec 07 PHP
MySQL相关说明
Jan 15 PHP
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
Apr 07 PHP
深入PHP中的HashTable结构详解
Jun 13 PHP
深入Apache与Nginx的优缺点比较详解
Jun 17 PHP
如何使用php输出时间格式
Aug 31 PHP
Php-Redis安装测试笔记
Mar 05 PHP
php防止用户重复提交表单
Nov 02 PHP
php简单解析mysqli查询结果的方法(2种方法)
Jun 29 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
Sep 18 PHP
PHP反射实际应用示例
Apr 03 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
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
Javascript UrlDecode函数代码
2010/01/09 Javascript
文本域中换行符的替换示例
2014/03/04 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
node.js中的querystring.parse方法使用说明
2014/12/10 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
vue中遇到的坑之变化检测问题(数组相关)
2017/10/13 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
python发送邮件脚本
2018/05/22 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
10条PHP编程习惯
2014/05/26 面试题
银行员工职业规划范文
2014/01/21 职场文书
《盲人摸象》教学反思
2014/02/16 职场文书
网络工程专业自荐信范文
2014/03/16 职场文书
房产继承公证书
2014/04/09 职场文书
整改通知书格式
2015/04/22 职场文书
债务纠纷代理词
2015/05/25 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书
mysql字段为NULL索引是否会失效实例详解
2022/05/30 MySQL
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技