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

2023-09-15 13:42:11

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

结果:

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

代码

后端thinkphp: 

//查询本周每天的的总金额数
//获取本周的起始日期和结束日期
$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: 

//查询本周每天的的总金额数
//获取本周的起始日期和结束日期
$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);

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

结果

代码

//查询今年中每月的总金额数据
// 获取当前年份
$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];
}

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

结果

代码

//查询近五年总金额数据
// 获取当前年份
$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);

更多推荐

TCP协议详解

TCP协议特点:面向连接、字节流、可靠传输。面向连接:使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该链接分配必要的内河资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,双方的数据读写可以通过一个连接进行。完成数据交换之后,通信双方都必须断开连接以释放系统资源。字节流:发送端

Docker的相关知识介绍以及mac环境的安装

一、什么是Docker大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:依赖关系复杂,容易出现兼容性问题开发、测试、生产环境有差异Docker就是来解决这些问题的。Docker是一个快速交付应用、运行应用的技术:可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统。运行时利用沙箱机

2023.9.21 组会记录

Robustdiseasemoduleminingviaenumerationofdiverseprize-collectingSteinertrees通过枚举多样的奖励收集斯坦纳树进行鲁棒的疾病模块挖掘疾病模块挖掘方法(DMMM)已被开发出来,将基因表达谱的分析与蛋白质-蛋白质相互作用(PPI)和其他网络中编码的先验

小步快跑,敏捷开发的精髓!

每日站会,两周一迭代,有自己的“ScrumMaster”,就是敏捷实践?No!具备敏捷之形的团队有很多,但是,真正掌握敏捷精髓的,却并不多见。这是因为,敏捷方法属于simplebutnoteasy(简单但并不好做)。结合我这么多年的体会来看,与其说敏捷是一场研发方式的变革,不如说是一场思维方式的变革。今天,结合我在某试

python基于django或flask开发的健身俱乐部网站rix1z

本系统有三个角色:管理员、用户和教练,要求具备以下功能:(1)用户可以浏览主页了解健身课程、健身器材、会员卡信息、新闻公告等信息,并进行在线留言;(2)管理员通过后台管理员界面,实现对用户信息管理,可以查看健身课程、健身器材等信息,让用户实时知道最新的健身俱乐部管理信息;技术栈后端:python+django前端:vu

鼠标不动了怎么办?3招解决问题!

“这是怎么回事呢?我的鼠标怎么会用着用着就突然不动了呢?现在有一些比较重要的工作要处理。请问有什么方法可以快速解决这个问题吗?”随着电脑在我们日常生活和工作中的广泛应用,鼠标是我们操作电脑不可或缺的工具之一。但是,有时候我们可能会遇到鼠标不动的问题,这会影响到我们使用电脑。鼠标不动了怎么办?今天小编就来告诉大家正确的解

软考之软件设计师考试总结(内附资料)

今年5月27日参加的软考,虽然研究生专业已经和计算机无缘了,但是只要想学,就没有什么能够阻挡。参加软考的初衷只是因为,,,辽宁省软考它不要钱,不要钱的证书咱不白嫖一个说不过去,先考下来再说这个证有没有用吧。确定报考后,再从网上找考试资料,忘记从哪里找的资料了反正资料有讲解视频和历年真题,感觉特别有用(分享网盘资料也不知

【ELFK】之消息队列kafka

一、kafka的定义Kafka是一个分布式的基于发布/订阅模式的消息队列(MQ,MessageQueue),主要应用于大数据实时处理领域。Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replicar协调的分布式消息中间件系统,它的最大的特性就是可以实时的处理大量

http-server的安装、前端使用http-server启本地服务

http-server简介http-server是一个简单的零配置的命令行http服务器,它足够强大便于生产和使用,用于本地测试和开发。有时候我们打开一个文档使用file协议打开的时候,不能发送ajax请求,只能使用http协议才能请求资源,具体的区别大家可以去参考[这篇文档](www.cnblogs.com/lish

Vue中的侦听器 Watch

侦听器Watch:::warning注意阅读本章内容之前必须先了解什么是计算属性Computed。相比计算属性,计算属性更适合用来做一些数据加工、过滤等处理。而侦听器更适合用来监听一个数据是否发生变化(包含data、props、computed),如果发生变化则触发特定的函数操作。定义Watch侦听器函数时,请不要使用

堆的实现(C版)

普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。1.堆的概念及结构堆的性质:堆中某个节点的

热文推荐