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的支持。
- 数据库收缩数据文件的尝试(三)(r11笔记第22天)
- 再议-Golang语言MessageBox用法实例
- linux下通过go语言获得系统进程cpu使用情况的方法
- Golang语言版ssh口令破解工具 --必须亲自敲代码,否则看了白看
- MySQL中insert语句没有响应的问题分析(r11笔记第21天)
- MySQL级联复制中的数据同步(第二篇)(r11笔记第21天)
- Golang语言 - 以任意类型的slices作为输入参数
- HDUOJ-------The Hardest Problem Ever
- Golang语言--【社区推荐阅读】 fmt用法
- 一个SQL性能问题的优化探索(一)(r11笔记第33天)
- HDUOJ-----1074 Integer Inquiry
- PXE无人值守安装Linux
- HDUOJ-----Robot Motion
- 对康托展开的一些心得...
- 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
- 前端模块化开发--React框架(四):高级应用(redux)
- Tomcat性能优化,学会薪水翻倍
- 前端模块化开发--React框架(三):应用进阶(react-router4&&antd框架)
- boost asio通信
- 前端模块化开发--React框架(二):脚手架&&网络请求框架
- Dubbo系列笔记之服务引用过程,不服不行
- 人人都能看懂的鸿蒙 “JS 小程序” 数据绑定原理
- Xcode12适配The linked library is missing one or more architectures required by this target问题
- [译] VueJS 中更好的组件组合方式
- 无异常日志,就不能排查问题了???
- 带你跳出源码地狱,从原理上理解MyBatis对Spring源码的扩展实现
- 网上翻译嫌麻烦?Python破解有道JS加密,让你随时能翻译
- 前端模块化开发--React框架(一): 入门和面向组件编程
- Python爬虫实战练习:爬取美团旅游景点评论数据
- Python爬虫实战:爬取链家网二手房数据