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

如何按周分组展示全年日期(不使用PHP DateTime)

按周分组全年日期并生成表格(不使用DateTime类)

你可以直接修改原代码的数组存储逻辑,用二维数组按周分组日期,最后遍历分组数据生成表格。以下是调整后的完整代码:

<?php
$now = mktime(0,0,0,1,1,2024);
// 用strtotime计算一年后更准确,避免闰年误差
$aYearLater = strtotime('+1 year', $now);
$weekGroups = []; // 按周分组的数组

$friday = strtotime('Next Friday', strtotime('-1 Day', $now));
$saturday = strtotime('Next Saturday', strtotime('-1 Day', $now));
$sunday = strtotime('Next Sunday', strtotime('-1 Day', $now));
$monday = strtotime('Next Monday', strtotime('-1 Day', $now));
$tuesday = strtotime('Next Tuesday', strtotime('-1 Day', $now));
$wednesday = strtotime('Next Wednesday', strtotime('-1 Day', $now));
$thursday = strtotime('Next Thursday', strtotime('-1 Day', $now));

while(true){
    $currentWeek = []; // 存储当前周的日期
    
    // 处理周六
    if($saturday <= $aYearLater){
        $currentWeek[] = [
            'date' => date('Y-m-d l', $saturday),
            'daynum' => date('w', $saturday)
        ];
    }
    // 处理周日
    if($sunday <= $aYearLater){
        $currentWeek[] = [
            'date' => date('Y-m-d l', $sunday),
            'daynum' => date('w', $sunday)
        ];
    }
    // 处理周一到周五
    if($monday <= $aYearLater) $currentWeek[] = ['date' => date('Y-m-d l', $monday), 'daynum' => date('w', $monday)];
    if($tuesday <= $aYearLater) $currentWeek[] = ['date' => date('Y-m-d l', $tuesday), 'daynum' => date('w', $tuesday)];
    if($wednesday <= $aYearLater) $currentWeek[] = ['date' => date('Y-m-d l', $wednesday), 'daynum' => date('w', $wednesday)];
    if($thursday <= $aYearLater) $currentWeek[] = ['date' => date('Y-m-d l', $thursday), 'daynum' => date('w', $thursday)];
    if($friday <= $aYearLater) $currentWeek[] = ['date' => date('Y-m-d l', $friday), 'daynum' => date('w', $friday)];
    
    // 如果当前周有数据,加入分组数组
    if(!empty($currentWeek)){
        $weekGroups[] = $currentWeek;
    }
    
    // 所有日期都超过一年后,终止循环
    if($friday > $aYearLater){
        break;
    }
    
    // 日期往后推一周
    $friday = strtotime('+1 Week', $friday);
    $saturday = strtotime('+1 Week', $saturday);
    $sunday = strtotime('+1 Week', $sunday);
    $monday = strtotime('+1 Week', $monday);
    $tuesday = strtotime('+1 Week', $tuesday);
    $wednesday = strtotime('+1 Week', $wednesday);
    $thursday = strtotime('+1 Week', $thursday);
}

// 生成表格输出
echo '<table border="1">';
// 表头:周六到周五
echo '<tr><th>周六</th><th>周日</th><th>周一</th><th>周二</th><th>周三</th><th>周四</th><th>周五</th></tr>';
foreach($weekGroups as $week){
    echo '<tr>';
    foreach($week as $day){
        echo '<td>'.$day['date'].'<br>'.$day['daynum'].'</td>';
    }
    // 如果最后一周天数不足7天,补空单元格
    $missingDays = 7 - count($week);
    for($i=0; $i<$missingDays; $i++){
        echo '<td></td>';
    }
    echo '</tr>';
}
echo '</table>';
?>

关键调整说明

  • 将原一维数组改为$weekGroups二维数组,每个子数组对应一周的所有日期
  • 每次循环一周时,用$currentWeek临时数组收集当前周的日期,完成后再加入分组数组
  • 修正一年后日期的计算方式,用strtotime('+1 year', $now)替代固定秒数,避免闰年(2024是闰年)导致的误差
  • 最后遍历分组数组生成HTML表格,每行对应一周,表头匹配你原代码的日期顺序,最后一周天数不足时自动补空单元格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:52:03