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

news2024/7/6 19:44:33

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

结果:

以今天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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1012744.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tomcat配置敏感信息屏蔽

一、tomcat敏感信息屏蔽 tomcat的错误信息会吧一些敏感信息给暴露出来比如版本号。 解决方案 在tomcat的conf文件下配置server.xml的 < Host > 标签 <Valve className"org.apache.catalina.valves.ErrorReportValve" showReport"false" showS…

leetcode92. 反转链表 II(java)

反转链表 II 题目描述哨兵技巧代码演示 题目描述 难度 - 中等 leetcode92. 反转链表 II 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例1&#xff…

老板要我开发一个简单的工作流引擎-读后感与补充

概述 最近读了一篇《老板要我开发一个简单的工作流引擎》 幽默风趣&#xff0c;干货较多&#xff0c;作为流程引擎的设计者、开发者、探索者&#xff0c;写的很好&#xff0c;合计自己的理解&#xff0c;对每个功能补充说明&#xff0c;对于流程引擎的应用场景&#xff0c;做出…

CoinW TOKEN2049 After Party落幕,分享如何在加密寒冬保持增长

CoinW, 全球领先的数字资产交易平台&#xff0c;在TOKEN2049新加坡期间举办的After Party&#xff0c;于当地时间13日晚落幕。Sui、1inch、Hacken、TinyTrader、AI Analysis等数十个项目方现场带来主题分享。CoinGecko、Cointelegraph、Coin Time、Coinlive、ODAILY、BlockBeat…

使用 Python 和机器学习掌握爬虫和情感分析

在本教程中&#xff0c;我们将抓取一个网站并使用自然语言处理来分析文本数据。 最终结果将是对网站内容的情感分析。以下是我们将遵循的步骤&#xff1a; 项目范围所需的库了解网页抓取抓取网站文本清理和预处理使用机器学习进行情感分析最后结果 一、项目范围 该项目的目…

Bean的管理

配置优先级 Bean管理 获取bean 默认情况下&#xff0c;Spring项目启动时&#xff0c;会把bean多创建好放在IOC容器中&#xff0c;如果想要主动获取这些bean&#xff0c;可以通过如下方式&#xff1a; bean作用域 Spring支持五种作用域&#xff0c;后三种在Web环境才生效&…

十、MySql的索引(重点)

文章目录 一、定义二、常见分类&#xff08;一&#xff09;案例 三、 认识磁盘&#xff08;一&#xff09;MySQL与存储&#xff08;二&#xff09;扇区&#xff08;三&#xff09;定位扇区&#xff08;四&#xff09;结论&#xff08;五&#xff09;磁盘随机访问(Random Access…

EasyX图形化界面

这里写目录标题 EasyX绘制简单的图形化窗口窗口坐标设置窗口属性实现基本绘图功能贴图原样贴图透明贴图认识素材 代码步骤 按键交互阻塞按键 鼠标交互 EasyX 绘制简单的图形化窗口 代码示例&#xff1a; while&#xff08;1&#xff09;&#xff1b; 可以防止闪屏 窗口坐标 …

初见QT,控件的基本应用,实现简单登录窗口

窗口实现代码 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口设置this->setFixedSize(538, 373); //固定窗口大小this->setWindowIcon(QIcon("G:\\QT_Icon\\windos_icon2.png"))…

JDK8特性——Stream API

文章目录 集合处理数据的弊端Steam流式思想概述Stream流的获取方式根据Collection获取通过Stream的of方法 Stream常用方法介绍forEachcountfilterlimitskipmapsorteddistinctmatchfindmax和minreducemap和reduce的组合mapToIntconcat Stream结果收集结果收集到集合结果收集到数…

[C++基础]-stack和queue

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、st…

setInterval倒计时切换页面后不准

背景 最近在做一个倒计时时&#xff0c;发现当切换浏览器tab后&#xff0c;再切回倒计时页面&#xff0c;倒计时的数据不准&#xff0c;比真正的剩余时间多&#xff0c;短时间还好&#xff0c;时间长了&#xff0c;计时器的误差会很大。 原因 倒计时是用setInterval每1000毫…

盘点:人工智能发展趋势下的4大常见AI算法以及应用场景

近年来&#xff0c;人工智能的发展速度十分惊人&#xff0c;在安防监控、工业制造、农业、教育、金融、医疗等领域中的应用越来越广泛&#xff0c;并且未来几年也将继续保持高速的发展趋势。通过人工智能技术提高自动化程度、减少人工干预、提高监管效率&#xff0c;已经成为当…

在QML中如何使用首字母小写(蛇形)命名法

前言 最近在学习研究QML&#xff0c;想要自定义组件、信号、属性等&#xff0c;但如何对.qml文件、变量命名却是个问题。习惯了蛇形命名规范后&#xff0c;再让我回到驼峰命名规范&#xff0c;多少是不愿意的。 为了坚守信仰&#xff0c;我翻遍了各大技术网站&#xff0c;然而…

里氏替换原则~

里氏替换原则&#xff08;Liskov Substitution Principle&#xff09;是面向对象设计中的一个基本原则&#xff0c;它是由Barbara Liskov提出的。 如果对于每一个类型为Apple的对象1&#xff0c;都有类型为fruit的对象2&#xff0c;使得以fruit定义的所有程序 P 在所有的对象1都…

Web服务器解析:从基础到高级的全面指南

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 引言 Web服务器是现代互…

竞赛选题 基于机器视觉的车道线检测

文章目录 1 前言2 先上成果3 车道线4 问题抽象(建立模型)5 帧掩码(Frame Mask)6 车道检测的图像预处理7 图像阈值化8 霍夫线变换9 实现车道检测9.1 帧掩码创建9.2 图像预处理9.2.1 图像阈值化9.2.2 霍夫线变换 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分…

el-calendar日历 简易排班

公司物流部要个简易的排班功能&#xff0c;由主管去设置线路&#xff0c;线路绑定上负责人。然后直接往日历里添加。 1、隐藏了自带的切换月份&#xff0c;改用了日期选择器。 2、禁用了非本月的点击事件&#xff0c;防止点击自动跳转到其他月份。 3、添加了点击多选&…

C# 流Stream详解(3)——FileStream源码

【FileStream】 构造函数 如果创建一个FileStream&#xff0c;常见的参数例如路径Path、操作方式FileMode、权限FileAccess。 这里说下FileShare和SafeFileHandle。 我们知道在读取文件时&#xff0c;通常会有两个诉求&#xff1a;一是如何更快的读取文件内容&#xff1b;二…

ATECLOUD二极管测试系统可以解决反向电流测试哪些痛点?

二极管具有单向导电性&#xff0c;但是有时候也会出现反向电流的情况。当反向电流变得很大时&#xff0c;二极管性能和寿命会受到很大影响。通过二极管测试系统对反向电流进行测试可以评估其性能和稳定性。 反向电流测试的重要性 理想情况下反向电流非常小&#xff0c;甚至可以…