数据按年月日统计并展示每个维度包含所有的列
话不多说直接上干货
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];
}