laravel实现按时间日期进行分组统计方法示例
时间:2022-07-27
本文章向大家介绍laravel实现按时间日期进行分组统计方法示例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
按日期进行分组
//统计七天内注册用户数量按天进行分组
$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 CarbonCarbon;
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;
}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ZaLou.Cn的支持。
- Hadoop和Zookeeper安装过程中出现的问题解决
- Ryu和OpenStack集成
- react+redux+webpack教程2
- C/C++ Development using Visual Studio Code, CMake and LLDB
- TensorFlow-10-基于 LSTM 建立一个语言模型
- jquery及原生javascript对jsonp解决跨域问题实例详解
- css负边距之详解
- Python进阶教程(三)
- Python进阶教程(二)
- Python进阶教程(一)
- TensorFlow-11-策略网络
- 对比requirejs更好的理解seajs
- 深入浅出Logistic Regression之二分类
- 如何自动生成文本摘要
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 详解Android使用@hide的API的方法
- Android 实现按两次返回键退出程序(两种方法)
- 使用 bash 倒计时日期的方法
- Android 实现页面跳转
- Android EditText密码的隐藏和显示功能
- linux系统下的时间配置综述
- Android TextView 去掉自适应默认的fontpadding的实现方法
- Linux文件/目录的权限及归属管理使用
- Android自定义环形LoadingView效果
- Android隐藏标题栏及解决启动闪过标题的实例详解
- Linux使用sed命令替换字符串教程
- Android实现获取短信验证码并自动填写功能
- Android 定时器实现图片的变换
- Android 软键盘状态并隐藏输入法的实例
- Linux磁盘管理之LVM的使用