thinkphp:查询本周中每天中日期的数据,查询今年中每个月的数据,查询近五年每年的总数据

一、查询本周中每天中日期的数据

结果:

以今天2023-09-14为例,这一周为2023-09-11~2023-09-07

代码

后端thinkphp:

php 复制代码
//查询本周每天的的总金额数
//获取本周的起始日期和结束日期
$weekStart = date('Y-m-d', strtotime('this week Monday'));
$weekEnd = date('Y-m-d', strtotime('this week Sunday'));
// 构造日期范围数组(从周一到周天)
$dateRange = [];
$currentDate = $weekStart;
while ($currentDate <= $weekEnd) {
    $dateRange[] = $currentDate;
    $currentDate = date('Y-m-d', strtotime($currentDate . ' +1 day'));
}
// 查询每天的总金额数
$result = Db::table('so_headers_all')
    ->field("DATE_FORMAT(FROM_UNIXTIME(creation_date), '%Y-%m-%d') AS date, IFNULL(SUM(order_all_amount), 0) AS total_amount")
    ->whereTime('creation_date', '>=', $weekStart)
    ->whereTime('creation_date', '<=', $weekEnd)
    ->group('date')
    ->select();
// 构造最终结果数组
$resultArray = [];
foreach ($dateRange as $date) {
    $found = false;
    foreach ($result as $row) {
        if ($row['date'] == $date) {
            $resultArray[] = $row;
            $found = true;
            break;
        }
    }
    if (!$found) {
        $resultArray[] = ['date' => $date, 'total_amount' => 0];
    }
}
$data['week_info'] = $resultArray;

扩展:增加星期

结果

代码

后端thinkphp:

php 复制代码
//查询本周每天的的总金额数
//获取本周的起始日期和结束日期
$weekStart = date('Y-m-d', strtotime('this week Monday'));
$weekEnd = date('Y-m-d', strtotime('this week Sunday'));
// 构造日期范围数组(从周一到周天)
$dateRange = [];
$currentDate = $weekStart;
while ($currentDate <= $weekEnd) {
    $dateRange[] = $currentDate;
    $currentDate = date('Y-m-d', strtotime($currentDate . ' +1 day'));
}
// 查询每天的总金额数
$result = Db::table('so_headers_all')
    ->field("DATE_FORMAT(FROM_UNIXTIME(creation_date), '%Y-%m-%d') AS date, IFNULL(SUM(order_all_amount), 0) AS total_amount")
    ->whereTime('creation_date', '>=', $weekStart)
    ->whereTime('creation_date', '<=', $weekEnd)
    ->group('date')
    ->select();
//去掉逗号,转换为
foreach ($result as &$item) {
    // $item['total_amount'] = intval(($item['total_amount'] / 10000));
    $item['total_amount'] = round(($item['total_amount'] / 10000),2);
}
// 构造最终结果数组
$resultArray = [];
$dateArray = [];
$totalAmountArray = [];
$weekdays = ['星期天', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];

foreach ($dateRange as $date) {
    $found = false;
    foreach ($result as $row) {
        if ($row['date'] == $date) {
            $weekdayIndex = date('w', strtotime($row['date']));
            $row['name'] = $weekdays[$weekdayIndex];
            $resultArray[] = $row;
            $dateArray[] = $row['date'];
            $totalAmountArray[] = $row['total_amount'];
            $found = true;
            break;
        }
    }
    if (!$found) {
        $weekdayIndex = date('w', strtotime($date));
        $resultArray[] = ['date' => $date, 'total_amount' => 0, 'name' => $weekdays[$weekdayIndex]];
        $dateArray[] = $date;
        $totalAmountArray[] = 0;
    }
}
$data['week_info']['date'] = $dateArray;
$data['week_info']['total_amount'] = $totalAmountArray;
$data['week_info1'] = $resultArray;
echo json_encode($data);

二、查询今年中每个月的数据

结果

代码

php 复制代码
//查询今年中每月的总金额数据
// 获取当前年份
$year = date('Y');
$result1 = Db::table('so_headers_all')
    ->field("DATE_FORMAT(FROM_UNIXTIME(creation_date), '%Y-%m') AS month, IFNULL(SUM(order_all_amount), 0) AS total_amount")
    ->whereTime('creation_date', '>=', strtotime($year . '-01-01'))
    ->whereTime('creation_date', '<=', strtotime($year . '-12-31'))
    ->group('month')
    ->select();
//去掉逗号,转换为
foreach ($result1 as &$item) {
    $item['total_amount'] = round(($item['total_amount'] / 10000),2);
}
// 构造最终结果数组
$dateArray1 = [];
$totalAmountArray1 = [];
for ($i = 1; $i <= 12; $i++) {
    //str_pad 函数用于在字符串的左侧(或右侧)填充指定字符,达到指定长度。这里,使用 str_pad 函数在 $i 左侧填充字符 '0',直到 $i 的长度达到 2。
    $month = str_pad($i, 2, '0', STR_PAD_LEFT);
    $dateArray1[] = $year . '-' . $month;
    $totalAmountArray1[$year . '-' . $month] = 0;
}
// 将查询结果填充到对应的月份位置
foreach ($result1 as $item) {
    $totalAmountArray1[$item['month']] = $item['total_amount'];
}
// 最终结果数组
foreach ($dateArray1 as $date) {
    $finalResult[] = [
        'date' => $date,
        'total_amount' => $totalAmountArray1[$date]
    ];
    $data['month_info']['date'][] = $date;
    $data['month_info']['total_amount'][] = $totalAmountArray1[$date];
}

三、查询近五年每年的总数据

结果

代码

php 复制代码
//查询近五年总金额数据
// 获取当前年份
$currentYear = date('Y');
// 构造最终结果数组
$data['year_info']['date'] = [];
$data['year_info']['total_amount'] = [];

for ($i = $currentYear - 4; $i <= $currentYear; $i++) {
    $year = (string) $i;

    $result = Db::table('so_headers_all')
        ->field("IFNULL(SUM(order_all_amount), 0) AS total_amount")
        ->whereTime('creation_date', '>=', strtotime($year . '-01-01'))
        ->whereTime('creation_date', '<=', strtotime($year . '-12-31'))
        ->find();
    $totalAmount = round(($result['total_amount'] / 10000), 2);
    $data['year_info']['date'][] = $year;
    $data['year_info']['total_amount'][] = $totalAmount;
}
echo json_encode($data);
相关推荐
架构技术专栏3 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
别动我齐刘海3 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
志尊宝4 小时前
Vue3 零基础每日笔记(071):暗黑模式与主题切换——CSS 变量 + Element Plus 暗黑方案
前端·css·笔记·vue·html·前端开发·软件开发
code2cat5 小时前
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中
java·cas·并发编程
WeiXin_DZbishe5 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码5 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
刘发财5 小时前
前端如何生成10000页PDF文件?
前端·javascript·开源
wewowilling5 小时前
认识微服务
java·运维·微服务·springcloud
A接拉起0075 小时前
2026 年 JavaScript 开发者需要了解的知识
前端·javascript·后端