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

PHP+MySQL实现单AJAX请求获取美东时区自定义周期的日/周/月销售转账数据

一次性获取多维度(日/周/月)销售转账统计的解决方案

针对你的需求,我们可以通过单条SQL语句结合精准的时区日期计算,配合一次AJAX请求完成所有维度的数据统计,同时满足自定义周期(月从10号启动、周从周一算起、纽约时区、工作日过滤)的要求。下面分步骤拆解实现方案:

1. 修正PHP日期周期计算(匹配需求规则)

你原来的月起始时间是当月1号,不符合“每月从10号开始统计”的要求,同时要确保所有日期计算严格基于America/New_York时区,修正后的代码如下:

date_default_timezone_set('America/New_York');
$current_datetime = date("Y-m-d H:i:s"); // 当前纽约完整时间(含时分秒)
$current_date = date("Y-m-d"); // 当前纽约日期(仅年月日)

// 日维度:当天00:00到23:59
$daily_start = $current_date . " 00:00:00";
$daily_end = $current_date . " 23:59:59";

// 周维度:本周一00:00到当前时间,后续在SQL中过滤工作日
$weekly_start = date("Y-m-d 00:00:00", strtotime('monday this week'));

// 月维度:处理跨月逻辑(当前日<10时,统计上月10号到当月9号;否则统计当月10号至今)
$current_day = intval(date('d'));
if ($current_day < 10) {
    $monthly_start = date('Y-m-10 00:00:00', strtotime('-1 month'));
    $monthly_end = date('Y-m-09 23:59:59');
} else {
    $monthly_start = date('Y-m-10 00:00:00');
    $monthly_end = $current_datetime;
}

2. 单条SQL完成多维度统计

利用SQL的SUM(CASE...)语法,结合工作日过滤逻辑,一次性计算日、周、月的总转账数和已接受转账数(适配你的transfers表结构):

假设你的Date字段存储的是纽约时间的日期字符串(如果是UTC时间,需用CONVERT_TZ转换时区,示例里会标注):

// 用PDO执行查询(你也可以换成mysqli,逻辑一致)
$sql = "
SELECT
    -- 日维度统计
    SUM(CASE WHEN Date BETWEEN ? AND ? THEN 1 ELSE 0 END) AS daily_total,
    SUM(CASE WHEN Date BETWEEN ? AND ? AND Accepted = 'Yes' THEN 1 ELSE 0 END) AS daily_accepted,
    -- 周维度统计(仅周一至周五,WEEKDAY返回0=周一,4=周五)
    SUM(CASE WHEN Date BETWEEN ? AND ? AND WEEKDAY(Date) BETWEEN 0 AND 4 THEN 1 ELSE 0 END) AS weekly_total,
    SUM(CASE WHEN Date BETWEEN ? AND ? AND Accepted = 'Yes' AND WEEKDAY(Date) BETWEEN 0 AND 4 THEN 1 ELSE 0 END) AS weekly_accepted,
    -- 月维度统计(自定义周期+工作日过滤)
    SUM(CASE WHEN Date BETWEEN ? AND ? AND WEEKDAY(Date) BETWEEN 0 AND 4 THEN 1 ELSE 0 END) AS monthly_total,
    SUM(CASE WHEN Date BETWEEN ? AND ? AND Accepted = 'Yes' AND WEEKDAY(Date) BETWEEN 0 AND 4 THEN 1 ELSE 0 END) AS monthly_accepted
FROM transfers;
";

// 如果Date是UTC时间,把所有Date替换为:CONVERT_TZ(Date, 'UTC', 'America/New_York')

// 绑定参数(顺序要和SQL中的?完全对应)
$params = [
    $daily_start, $daily_end,
    $daily_start, $daily_end,
    $weekly_start, $current_datetime,
    $weekly_start, $current_datetime,
    $monthly_start, $monthly_end,
    $monthly_start, $monthly_end
];

$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$stats = $stmt->fetch(PDO::FETCH_ASSOC);

注:如果用PostgreSQL数据库,需把WEEKDAY(Date)替换为EXTRACT(DOW FROM Date),同时工作日条件改为BETWEEN 1 AND 5(PostgreSQL中1=周一,5=周五)。

3. 后端接口返回JSON数据

在dashboardStats接口中,直接将统计结果转为JSON返回:

header('Content-Type: application/json');
echo json_encode($stats);
exit;

4. 前端AJAX接收并渲染数据

修改你的AJAX代码,接收返回的JSON数据并渲染到对应卡片:

$.ajax({
    url: "<?= base_url(). "/dashboardStats";?>",
    method: "GET",
    dataType: "JSON",
    contentType: 'application/json'
}).done( function(data) {
    // 渲染日统计数据
    $(".dailyTotal").text(data.daily_total);
    $(".dailyAccepted").text(data.daily_accepted);
    // 渲染周统计数据
    $(".weeklyTotal").text(data.weekly_total);
    $(".weeklyAccepted").text(data.weekly_accepted);
    // 渲染月统计数据
    $(".monthlyTotal").text(data.monthly_total);
    $(".monthlyAccepted").text(data.monthly_accepted);
}).fail(function(jqXHR, textStatus, errorThrown) {
    console.error("获取统计数据失败:", errorThrown);
});

内容的提问来源于stack exchange,提问作者Aun Zaidi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:57:40