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中函数内引用全局变量的方法
Oct 20 PHP
PHP HTML代码串 截取实现代码
Jun 29 PHP
php 提速工具eAccelerator 配置参数详解
May 16 PHP
PHP判断图片格式的七种方法小结
Jun 03 PHP
PHP调用JAVA的WebService简单实例
Mar 11 PHP
PHP文件锁定写入实例解析
Jul 14 PHP
PHP写日志的实现方法
Nov 05 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
Nov 25 PHP
php实现的Curl封装类Curl.class.php用法实例分析
Sep 25 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
yii2使用ajax返回json的实现方法
May 14 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
Oct 17 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
Oracle 常见问题解答
2006/10/09 PHP
用PHP实现多服务器共享SESSION数据的方法
2007/03/16 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
2014/05/10 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
php之Smarty模板使用方法示例详解
2014/07/08 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
2017/05/30 PHP
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
Angular6新特性之Angular Material
2018/12/28 Javascript
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
在Python中处理字符串之isdecimal()方法的使用
2015/05/20 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
Python之列表实现栈的工作功能
2019/01/28 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
Python values()与itervalues()的用法详解
2019/11/27 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
python基于opencv实现人脸识别
2021/01/04 Python
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
俄罗斯童装网上商店:BebaKids
2020/06/06 全球购物
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
函授毕业生的自我鉴定
2013/11/26 职场文书
优秀交警事迹材料
2014/01/26 职场文书
银行简历自我评价
2014/02/11 职场文书
2014年社区庆元旦活动方案
2014/03/08 职场文书
学校组织向国旗敬礼活动方案(中小学适用)
2014/09/27 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书
忆童年!用Python实现愤怒的小鸟游戏
2021/06/07 Python
关于JavaScript轮播图的实现
2021/11/20 Javascript
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS