php实现周统计
使用 PHP 实现周统计
获取当前周的起始和结束日期
$weekStart = date('Y-m-d', strtotime('this week Monday'));
$weekEnd = date('Y-m-d', strtotime('this week Sunday'));
统计一周内的数据
假设需要统计数据库中的订单数据,可以使用以下代码:
$query = "SELECT COUNT(*) as total_orders, SUM(amount) as total_amount
FROM orders
WHERE order_date BETWEEN '$weekStart' AND '$weekEnd'";
$result = mysqli_query($connection, $query);
$stats = mysqli_fetch_assoc($result);
按天分组统计一周数据
如果需要按天统计一周内的数据变化:
$query = "SELECT DAYNAME(order_date) as day, COUNT(*) as count
FROM orders
WHERE order_date BETWEEN '$weekStart' AND '$weekEnd'
GROUP BY DAYOFWEEK(order_date)";
$result = mysqli_query($connection, $query);
$dailyStats = [];
while ($row = mysqli_fetch_assoc($result)) {
$dailyStats[$row['day']] = $row['count'];
}
生成周报表
可以生成一个包含完整周数据的报表:
$weekDays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
$fullWeekStats = [];
foreach ($weekDays as $day) {
$fullWeekStats[$day] = $dailyStats[$day] ?? 0;
}
计算周环比
与上周数据对比:
$lastWeekStart = date('Y-m-d', strtotime('last week Monday'));
$lastWeekEnd = date('Y-m-d', strtotime('last week Sunday'));
$query = "SELECT COUNT(*) as last_week_total
FROM orders
WHERE order_date BETWEEN '$lastWeekStart' AND '$lastWeekEnd'";
$result = mysqli_query($connection, $query);
$lastWeekData = mysqli_fetch_assoc($result);
$growthRate = ($stats['total_orders'] - $lastWeekData['last_week_total']) / $lastWeekData['last_week_total'] * 100;
可视化周数据
使用图表库展示周统计数据:
// 示例使用 Chart.js 数据格式
$chartData = [
'labels' => array_keys($fullWeekStats),
'datasets' => [
[
'label' => 'Weekly Orders',
'data' => array_values($fullWeekStats),
'backgroundColor' => 'rgba(75, 192, 192, 0.2)',
'borderColor' => 'rgba(75, 192, 192, 1)'
]
]
];
处理跨年周数据
对于跨年周的特殊处理:
$year = date('Y');
$weekNumber = date('W');
$firstDay = new DateTime();
$firstDay->setISODate($year, $weekNumber, 1);
$lastDay = new DateTime();
$lastDay->setISODate($year, $weekNumber, 7);
周统计缓存
为提高性能,可以缓存周统计结果:
$cacheKey = 'weekly_stats_' . date('Y-W');
if (!($stats = apcu_fetch($cacheKey))) {
// 执行统计查询
apcu_store($cacheKey, $stats, 3600); // 缓存1小时
}






