周報系統需根據周數獲取該周起始日期(周一)與結束日期(周日),便於數據篩選與展示。
get_week($year)function get_week($year) {
$year_start = "$year-01-01";
$year_end = "$year-12-31";
$startday = strtotime($year_start);
// 若 1 月 1 日非周一,取下一個周一作為第一周起始
if (intval(date('N', $startday)) != 1) {
$startday = strtotime('next monday', strtotime($year_start));
}
$year_monday = date('Y-m-d', $startday);
$endday = strtotime($year_end);
// 若 12 月 31 日屬於第 53 週(罕見),取最後一個周日
if (intval(date('W', $endday)) == 53) {
$endday = strtotime('last sunday', strtotime($year_end));
}
$weeks = intval(date('W', $endday)); // 該年總周數
$week_array = [];
for ($i = 1; $i <= $weeks; $i++) {
$j = $i - 1;
$start_date = date('Y-m-d', strtotime("$year_monday +$j week"));
$end_date = date('Y-m-d', strtotime("$start_date +6 day"));
$week_array[$i] = [
str_replace('-', '.', $start_date),
str_replace('-', '.', $end_date)
];
}
return $week_array;
}
$weeks = get_week(2011); echo '第 18 周開始:' . $weeks[18][0]; // 2011.05.02 echo '第 18 周結束:' . $weeks[18][1]; // 2011.05.08
+N week 遞增- 替換為 . 適配項目日期顯示習慣DateTime 對象或時間戳DatePeriod 類實現更標準化PHP date('W') 返回 ISO 8601 週號(1-53),跨年週屬於舊年或新年取決於周四所屬年份,業務邏輯需確認是否符合預期。