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
PHP 压缩文件夹的类代码
Nov 05 PHP
从康盛产品(discuz)提取出来的模板类
Jun 28 PHP
php 阴历-农历-转换类代码
Jan 16 PHP
PHP防止post重复提交数据的简单例子
Jun 07 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
Mar 10 PHP
PHP curl伪造IP地址和header信息代码实例
Apr 27 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
Mar 07 PHP
PHP面向对象程序设计类的定义与用法简单示例
Dec 27 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
Jul 13 PHP
yii2安装详细流程
May 23 PHP
PHP编程一定要改掉的5个不良习惯
Sep 18 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图像处理类代码分享
2012/01/19 PHP
php中 $$str 中 &quot;$$&quot; 的详解
2015/07/06 PHP
从盛大通行证上摘下来的身份证验证js代码
2011/01/11 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
2015/12/16 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
Bootstrap选项卡与Masonry插件的完美结合
2016/07/06 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
关于vue状态过渡transition不起作用的原因解决
2019/04/09 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
使用Python的内建模块collections的教程
2015/04/28 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
Python中return self的用法详解
2018/07/27 Python
浅谈Django的缓存机制
2018/08/23 Python
基于python实现百度翻译功能
2019/05/09 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
python实现代码统计程序
2019/09/19 Python
下载官网python并安装的步骤详解
2019/10/12 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
函授本科毕业自我鉴定
2013/10/09 职场文书
经理管理专业毕业自荐书范文
2014/02/12 职场文书
慰问敬老院活动总结
2014/04/26 职场文书
社团活动总结
2014/04/28 职场文书
个人整改措施书面材料
2014/10/24 职场文书
js基础语法与maven项目配置教程案例
2021/07/15 Javascript