如何按周分组展示全年日期(不使用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
相关产品推荐
相关产品推荐

