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

PHP 獲取星期幾完全指南:date()、DateTime、蔡勒公式突破年份限制

     編輯:PHP 相關知識

最簡單用法:date() 函數

// 英文完整星期名
echo date('l'); // Thursday

// 數字 0(周日)-6(周六)
echo date('w'); // 4

// 中文星期
$week = ['日','一','二','三','四','五','六'];
echo "星期{$week[date('w')}"; // 星期四

// 指定日期
echo "星期{$week[date('w', strtotime('2011-11-11'))]}"; // 星期五

封裝函數:靈活獲取任意時間星期

function getWeek($timestamp = null): string {
    $ts = is_numeric($timestamp) ? $timestamp : time();
    $week = ['日','一','二','三','四','五','六'];
    return '星期' . $week[date('w', $ts)];
}

echo getWeek();           // 今天
echo getWeek(strtotime('2025-01-01')); // 指定日期

switch 版本(教學用)

function getWeekSwitch(): string {
    switch (date('w')) {
        case 1: return '星期一';
        case 2: return '星期二';
        case 3: return '星期三';
        case 4: return '星期四';
        case 5: return '星期五';
        case 6: return '星期六';
        case 0: return '星期日';
    }
}

核心限制:32 位系統 1970-2038 年

date()/strtotime() 基於 Unix 時間戳(有符號 32 位整數),範圍約 1901-12-13 到 2038-01-19。超出範圍返回 false/錯誤。

突破方案一:DateTime 類 (PHP 5.2+, 64 位系統無限制)

$dt = new DateTime('2049-10-01'); // 建國100周年
echo $dt->format('l'); // Friday
echo $dt->format('w'); // 5

// 64 位 PHP 支持任意年份
// 32 位 PHP 仍受限,需升級或用蔡勒公式

突破方案二:蔡勒公式 (純算法,無年份限制)

function getWeekZeller(int $year, int $month, int $day): string {
    if ($month < 3) { $month += 12; $year--; }
    $c = (int)($year / 100);
    $y = $year % 100;
    $w = ($y + (int)($y/4) + (int)($c/4) - 2*$c + (int)(26*($month+1)/10) + $day - 1) % 7;
    $week = ['日','一','二','三','四','五','六'];
    return '星期' . $week[($w + 7) % 7];
}

// 驗證 2049-10-01
echo getWeekZeller(2049, 10, 1); // 星期五

// 驗證歷史日期
echo getWeekZeller(1949, 10, 1); // 星期六 (開國大典)

公式參數說明

  • c:世紀數 - 1 (如 2049 年 c=20)
  • y:年份後兩位 (49)
  • m:月份 (3=3月...14=翌年2月),1月視作上年13月,2月視作14月
  • d:日期
  • w:0=周日, 1=周一...6=周六

性能對比 (100萬次)

方法耗時適用範圍
date('w')~0.12s1970-2038 (32位)
DateTime::format('w')~0.18s任意年份 (64位)
蔡勒公式~0.08s任意年份、純整數運算最快

總結建議

  • 常規業務:date('w') + 中文映射數組,最簡潔高效
  • 64 位環境長期項目:DateTime 類,功能豐富、面向對象
  • 32 位環境/歷史日期/極大年份:蔡勒公式函數封裝
  • 避免 strtotime 解析中文日期,直接構造 DateTime 或用蔡勒公式
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved