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

PHP 日期格式化工具函數:時區設定、多格式輸出、星期中文化與時間戳轉換

     編輯:PHP 綜合知識

專案中常需將時間戳格式化為多種顯示格式 (中文完整、標準 ISO、短日期) 並顯示中文星期。本文封裝一個 ShowDate() 函數:支援指定時間字串/預設當前時間、三種輸出格式旗標、自動設定 PRC 時區、中文星期映射,並分析 date() 格式字元與常見陷阱。

函數完整實作

 date('Y年m月d日 H:i:s', $timestamp) . " {$week[$w]}", // 2024年01月15日 10:30:45 星期一
        1 => date('Y年m月d日 H:i:s', $timestamp) . " {$week[$w]}", // 同 0
        2 => date('Y-m-d H:i:s', $timestamp) . " {$week[$w]}",     // 2024-01-15 10:30:45 星期一
        3 => date('y/m/d', $timestamp),                             // 24/01/15
        default => date('Y年m月d日 H:i:s', $timestamp) . " {$week[$w]}",
    };
}

// 使用範例
echo ShowDate(0);                    // 當前時間,中文完整格式
echo ShowDate(2, '2024-12-25 00:00:00'); // 指定時間,ISO 格式
echo ShowDate(3);                    // 短日期

date() 格式字元速查表

字元含義範例
Y4位數年2024
y2位數年24
m月份 01-1201
n月份 1-12 (無前導零)1
d日期 01-3115
j日期 1-3115
H24小時 00-2310
h12小時 01-1210
i分鐘 00-5930
s秒 00-5945
w星期 0(日)-6(六)1
W年度第幾週03

常見陷阱與最佳實務

⚠️ 避坑指南
  • 時區必須設定:date_default_timezone_set('PRC') 或 php.ini date.timezone = PRC。未設定預設 UTC,導致顯示時間偏移 8 小時。
  • strtotime() 解析格式限制:支援 "Y-m-d H:i:s"、"Y/m/d"、英文月份、相對時間 ("+1 day", "next Monday")。不支援中文格式 ("2024年1月15日")。
  • 格式字元 m vs n:m 輸出 01,n 輸出 1。同理 d/j、H/h。
  • 微秒支援:date('u') 僅在 microtime(true) 或 DateTime 物件可用。date() 接收整數時間戳無微秒。
  • 現代化替代:DateTime / DateTimeImmutable 物件導向、時區感知、鏈式操作、格式化更強大:
    $dt = new DateTime('now', new DateTimeZone('PRC'));
                echo $dt->format('Y年m月d日 H:i:s l'); // l 為英文完整星期
                // 中文星期需自行映射

進階:支援多語系星期的擴展版

function formatDate(
    string $format = 'Y-m-d H:i:s',
    ?string $time = null,
    string $timezone = 'PRC',
    string $locale = 'zh_TW'
): string {
    $dt = new DateTime($time ?? 'now', new DateTimeZone($timezone));
    $weekMap = [
        'zh_TW' => ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
        'zh_CN' => ['周日','周一','周二','周三','周四','周五','周六'],
        'en'    => ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],
    ];
    $week = $weekMap[$locale] ?? $weekMap['zh_TW'];
    $format = str_replace('{W}', $week[(int)$dt->format('w')], $format);
    return $dt->format($format);
}

// 使用: formatDate('Y年m月d日 {W}', '2024-01-15', 'PRC', 'zh_TW');

日期格式化是業務邏輯高頻操作。封裝統一工具函數、強制時區設定、採用 DateTime 物件替代過程式函數,能消除時區 Bug、提升代碼可測試性與國際化支援度。

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