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下实现农历日历的代码
Mar 07 PHP
php.ini中的php-5.2.0配置指令详解
Mar 27 PHP
晋城吧对DiscuzX进行的前端优化要点
Sep 05 PHP
php Smarty 字符比较代码
Feb 27 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
Dec 24 PHP
php通过正则表达式记取数据来读取xml的方法
Mar 09 PHP
PHP模板引擎smarty详细介绍
May 26 PHP
zend framework重定向方法小结
May 28 PHP
ThinkPHP简单使用memcache缓存的方法
Nov 15 PHP
php简单随机字符串生成方法示例
Apr 19 PHP
PHP中phar包的使用教程
Jun 14 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
Nov 13 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
收音机另类DIY - 纸巾盒做外壳
2021/03/02 无线电
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
PHP使用memcache缓存技术提高响应速度的方法
2014/12/26 PHP
php导出中文内容excel文件类实例
2015/07/06 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
javascript数组组合成字符串的脚本
2021/01/06 Javascript
5个javascript的数字格式化函数分享
2011/12/07 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
深入理解Angular.JS中的Scope继承
2017/06/04 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
js 获取html5的data属性实现方法
2017/07/28 Javascript
Express使用html模板的详细代码
2017/09/18 Javascript
JavaScript实现选项卡效果的分析及步骤
2019/04/16 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
angular4应用中输入的最小值和最大值的方法
2019/05/17 Javascript
使用Vue实现简单计算器
2020/02/25 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
python文件与目录操作实例详解
2016/02/22 Python
Python模块包中__init__.py文件功能分析
2016/06/14 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
解决项目pycharm能运行,在终端却无法运行的问题
2019/01/19 Python
python多线程与多进程及其区别详解
2019/08/08 Python
Python加速程序运行的方法
2020/07/29 Python
html5 自定义播放器核心代码
2013/12/20 HTML / CSS
Kiehl’s科颜氏西班牙官方网站:源自美国的植物护肤品牌
2020/02/22 全球购物
计算机网络专业推荐信
2013/11/24 职场文书
教师党性分析材料
2014/02/04 职场文书
环境日宣传活动总结
2014/07/09 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
寒假生活随笔
2015/08/15 职场文书
详解Python+OpenCV进行基础的图像操作
2022/02/15 Python