数据按年月日统计并展示每个维度包含所有的列

10 篇文章 0 订阅
6 篇文章 0 订阅

数据按年月日统计并展示每个维度包含所有的列

话不多说直接上干货

1、首先,我们把要查询的数据全部查出来,该分页的分页
2、遍历获取到的数组,取出所有的时间放到一个数组里面(最好先转好时间格式,好进行去重)
比如,每列里面的时间戳字段的值都不一样,你都不知道哪个时间戳的数据归到哪个时间里面,如果你转成2020-10,那1602320289、1602323785通过date(Y-m,时间戳)都是2020-10,那就知道这两条数据都是属于2020-10的明细了
3、计算每个月份的总和或者其他你想要统计的数据
我们要统计的话当然是最好放在循环外去统计出来,然后把值嵌到相应的月份数组里面一起返回回去
4、全套方法,包括根据时间戳获取当月的起止时间都给您码出来了,尽情使用吧

// An highlighted block
    /*
     * 按月份统计和展示明细
     */
    public function getMonthRecord(BillRecordRepository $billRecordRepository)
    {
        try {
            $pageNo = $this->request->post('page_no', 1);
            $pageSize = $this->request->post('page_size', 10);
            $info = $billRecordRepository->getUnsettledMoneyRecord($pageNo, $pageSize);
            if (!$info) {
                return api_format(self::OK, 'Success');
            }
			//list为获得的数据
            list($pageNo, $pageSize, $totalCount, $totalPage, $list) = $info;
            $data = [
                'data' => [],
                'page_no' => $pageNo,
                'page_size' => $pageSize,
                'total_count' => $totalCount,
                'total_page' => $totalPage,
            ];
            $date = $dateArray = [];
            //遍历list,将要统计的时间字段转格式,并且放到数据里
            foreach ($list as $k => $v) {
                $date[] = date('Y-m', $v['create_time']);
            }
            //对数组进行去重,比如说10条数据里有9月份的,有10月份的
            //那数组里的值就是[2020-09,2020-10]
            $date = array_values(array_unique($date));
            //接下来就要统计每个月的某个数据的总和了
            foreach ($date as $k => $v) {
            	//月份
                $dateArray[$k]['date'] = $v;
                //获取时间数组里的所有月份的统计总和
                $dateArray[$k]['money'] = $billRecordRepository->getMoneyOfMonth($id, strtotime($v));
            }
			//对月份数据数组进行遍历
            foreach ($dateArray as $k => $v) {
            	//对所有数据进行遍历
                foreach ($list as $key => $value) {
                	//对时间戳进行格式转化
                    $month = date('Y-m', $value['create_time']);
                    //如果遍历的列月份时间与数组月份时间相同
                    if ($month == $v['date']) {
                        $data['data'][$k]['date'] = $month;
                        $data['data'][$k]['money'] = $v['money'];
                        $data['data'][$k]['list'][] = [
                            'money' => round($value['money'], 2),
                            'date' => date('Y-m-d H:i:s', $value['create_time']),
                            'title' => $value['title']
                        ];
                    }
                }
            }
            return api_format(self::OK, 'Success', $data);
        } catch (Exception $e) {
            throw $e;
        }
    }
下面展示一些 `内联代码片`。
// A code block
var foo = 'bar';
    /*
    * 按月份获取总额
    */
    public function getMoneyOfMonth($id, $monthTimestamp)
    {
        $timeArray = getMonthByDate($monthTimestamp);
        $money = MoneyRecord::where('id', $id)
            ->where('create_time', 'BETWEEN', $timeArray)
            ->sum('money');

        return $money;
    }

下面展示一些 内联代码片

// A code block
var foo = 'bar';
/*
 * 根据时间戳获取当月起止时间戳
 */
function getMonthByDate($timestamp)
{
    $y = date("Y", $timestamp);
    $m = date("m", $timestamp);
    $days = date('t', $timestamp);

    $startMonth = mktime(0, 0, 0, $m, 1, $y); // 本月开始时间
    $endMonth = mktime(23, 59, 59, $m, $days, $y); // 本月结束时间
    return [$startMonth, $endMonth];
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值