You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何从当前日期获取过去7周、7个月日期范围并实现分组销售统计

实现方案

核心逻辑和你现有7天统计逻辑对齐,先计算对应时间范围,再调整分组规则即可,分为7周、7个月两个场景实现:


过去7周统计

PHP时间范围计算

$today = date("Y-m-d");
// 计算7周前的日期作为查询起始点
$lastSevenWeeksStart = date('Y-m-d', strtotime('-7 weeks'));

统计SQL

注:WEEK函数第二个参数1代表周起始为周一,如果需要匹配示例的周日为周起始,改为0即可

SELECT
    -- 格式化输出周区间,如 08/08/2021 - 08/14/2021
    CONCAT(
        DATE_FORMAT(DATE_SUB(payment.createdDateTime, INTERVAL (WEEKDAY(payment.createdDateTime)) DAY), '%m/%d/%Y'),
        ' - ',
        DATE_FORMAT(DATE_ADD(payment.createdDateTime, INTERVAL (6 - WEEKDAY(payment.createdDateTime)) DAY), '%m/%d/%Y')
    ) AS week_range,
    ROUND(SUM(IFNULL(payment.tmpNetTotal, 0)), 2) AS sales
FROM
    srp_erp_pos_menusalesmaster AS sales
    JOIN (
        SELECT 
            SUM(IFNULL(amount, 0)) AS tmpNetTotal,
            createdDateTime,
            menuSalesID 
        FROM srp_erp_pos_menusalespayments 
        WHERE createdDateTime BETWEEN '{$lastSevenWeeksStart}' AND '{$today}'  
        GROUP BY menuSalesID
    ) AS payment ON sales.menuSalesID = payment.menuSalesID 
WHERE 
    isHold = 0 
    AND sales.isVoid = 0 
    AND companyID = {$companyID} 
GROUP BY YEAR(payment.createdDateTime), WEEK(payment.createdDateTime, 1)
ORDER BY payment.createdDateTime DESC

过去7个月统计

PHP时间范围计算

$today = date("Y-m-d");
// 计算7个月前的当月第一天作为查询起始点,保证完整统计整月数据
$lastSevenMonthsStart = date('Y-m-d', strtotime('-7 months', strtotime(date('Y-m-01'))));

统计SQL

SELECT
    -- 格式化输出月区间,如 07/01/2021 - 07/31/2021
    CONCAT(
        DATE_FORMAT(payment.createdDateTime, '%m/01/%Y'),
        ' - ',
        DATE_FORMAT(LAST_DAY(payment.createdDateTime), '%m/%d/%Y')
    ) AS month_range,
    ROUND(SUM(IFNULL(payment.tmpNetTotal, 0)), 2) AS sales
FROM
    srp_erp_pos_menusalesmaster AS sales
    JOIN (
        SELECT 
            SUM(IFNULL(amount, 0)) AS tmpNetTotal,
            createdDateTime,
            menuSalesID 
        FROM srp_erp_pos_menusalespayments 
        WHERE createdDateTime BETWEEN '{$lastSevenMonthsStart}' AND '{$today}'  
        GROUP BY menuSalesID
    ) AS payment ON sales.menuSalesID = payment.menuSalesID 
WHERE 
    isHold = 0 
    AND sales.isVoid = 0 
    AND companyID = {$companyID} 
GROUP BY YEAR(payment.createdDateTime), MONTH(payment.createdDateTime)
ORDER BY payment.createdDateTime DESC

补充说明

  • 上述SQL基于MySQL语法,若使用其他数据库,仅需替换对应日期处理函数即可
  • 分组时同时按年+周/年+月分组,可避免跨年数据统计错误

内容的提问来源于stack exchange,提问作者khn Rzk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:00:04