首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 計算指定年份每周起止日期:周報功能實用工具函數

     編輯:PHP 綜合知識

業務場景

周報系統需根據周數獲取該周起始日期(周一)與結束日期(周日),便於數據篩選與展示。

核心函數 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

關鍵邏輯說明

  1. 確定第一周:ISO 8601 規定第一周包含該年第一個周四,代碼簡化為「第一個周一」
  2. 確定最後一周:處理跨年周、53 週情況
  3. 循環生成:以第一周周一為基準,每次 +N week 遞增
  4. 格式化:將 - 替換為 . 適配項目日期顯示習慣

擴展建議

  • 加入緩存機制,避免重複計算同年份
  • 支持傳入 DateTime 對象或時間戳
  • 增加參數控制周起始日(周一/周日)
  • 結合 DatePeriod 類實現更標準化

注意

PHP date('W') 返回 ISO 8601 週號(1-53),跨年週屬於舊年或新年取決於周四所屬年份,業務邏輯需確認是否符合預期。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved