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

PHP date() 函數格式化參數完整速查表:Y/m/d/H/i/s 等 30+ 參數詳解

     編輯:PHP 相關知識

PHP date() 函數格式化參數完整速查表

date() 是 PHP 日期時間格式化最常用函數,參數超過 30 個。本文分類整理、附輸出範例、常見組合模板、時區陷阱與 DateTime 現代替代方案。

年份參數

參數說明範例輸出
Y4 位數年份2024
y2 位數年份24
L是否閏年 (1/0)1
oISO-8601 週數年份 (配合 W)2024

月份參數

參數說明範例輸出
m2 位數月份 (01-12)01
n月份不補零 (1-12)1
F英文全名January
M3 字母縮寫Jan
t該月天數 (28-31)31

日期參數

參數說明範例輸出
d2 位數日期 (01-31)05
j日期不補零 (1-31)5
z年間第幾天 (0-365)4

星期參數

參數說明範例輸出
w數字星期 (0=週日, 6=週六)5
D3 字母縮寫Fri
l英文全名 (小寫 L)Friday
NISO-8601 星期 (1=週一, 7=週日)5
W年間第幾週 (ISO-8601,週一開始)01

時間參數

參數說明範例輸出
g12 小時制不補零 (1-12)3
h12 小時制補零 (01-12)03
G24 小時制不補零 (0-23)15
H24 小時制補零 (00-23)15
i分鐘補零 (00-59)30
s秒數補零 (00-59)45
u微秒 (PHP 5.2.2+,date() 永遠 000000,需 DateTime)000000

AM/PM 參數

參數說明範例輸出
a小寫 am/pmpm
A大寫 AM/PMPM

時區與標準格式

參數說明範例輸出
e時區識別符Asia/Taipei
T伺服器時區縮寫CST
OGMT 偏移 (小時)+0800
PGMT 偏移 (時:分)+08:00
cISO 8601 完整格式2024-01-05T15:30:45+08:00
rRFC 2822 格式Fri, 05 Jan 2024 15:30:45 +0800
UUnix 時間戳 (秒)1704449445

其他參數

參數說明範例
S英文序數後綴 (st/nd/rd/th)5th, 1st, 2nd, 3rd
I是否夏令時 (1/0)0
BSwatch Internet Time (000-999)456

常用組合模板 (可直接複製)

<?php
$now = time();  // 或 new DateTime()

// 1. 標準日期時間
echo date('Y-m-d H:i:s', $now);           // 2024-01-05 15:30:45
echo date('Y/m/d H:i:s', $now);           // 2024/01/05 15:30:45

// 2. 純日期
echo date('Y-m-d', $now);                 // 2024-01-05
echo date('Y年m月d日', $now);             // 2024年01月05日 (需 UTF-8)

// 3. 純時間
echo date('H:i:s', $now);                 // 15:30:45
echo date('h:i:s A', $now);               // 03:30:45 PM

// 4. 含星期
echo date('Y-m-d (D)', $now);             // 2024-01-05 (Fri)
echo date('Y-m-d l', $now);               // 2024-01-05 Friday

// 5. 標準交換格式 (API、日誌、資料庫)
echo date('c', $now);                     // 2024-01-05T15:30:45+08:00 (ISO 8601)
echo date(DATE_RFC3339, $now);            // 同上 (常數別名)
echo date('r', $now);                     // Fri, 05 Jan 2024 15:30:45 +0800 (RFC 2822)

// 6. 檔案命名/日誌前綴 (無特殊字元)
echo date('Ymd_His', $now);               // 20240105_153045

// 7. 友好顯示
echo date('n月j日 H:i', $now);            // 1月5日 15:30
?>

⚠️ 關鍵陷阱與最佳實踐

1. 時區必須正確設定

<?php
// php.ini (推薦)
date.timezone = "Asia/Taipei"

// 或代碼中設定 (需在 date() 前)
date_default_timezone_set('Asia/Taipei');

// 驗證
echo date_default_timezone_get();  // Asia/Taipei
?>

未設定會觸發 E_WARNING 並預設 UTC,導致時間偏移 8 小時 (台灣/中國)。

2. date() 無法輸出微秒

<?php
// date('u') 永遠返回 000000
// 必須用 DateTime
$dt = new DateTime();
echo $dt->format('Y-m-d H:i:s.u');  // 2024-01-05 15:30:45.123456
?>

3. DateTime 現代替代方案 (強烈建議)

<?php
// 物件導向、不可變 (PHP 5.5+ DateTimeImmutable)、鏈式操作、時區感知
$dt = new DateTimeImmutable('now', new DateTimeZone('Asia/Taipei'));

echo $dt->format('Y-m-d H:i:s.u');           // 含微秒
echo $dt->modify('+1 day')->format('c');     // 日期運算
echo $dt->diff(new DateTime('2024-12-31'))->format('%a 天'); // 差值計算

// 格式化常數
echo $dt->format(DATE_ATOM);      // ISO 8601
echo $dt->format(DATE_COOKIE);    // Cookie 格式
echo $dt->format(DATE_RFC3339);   // RFC 3339
?>

4. 效能:批量格式化用 date()、單點用 DateTime

<?php
// 迴圈中大量格式化:date() 比 DateTime 快 3-5 倍
$start = microtime(true);
for ($i = 0; $i < 100000; $i++) date('Y-m-d H:i:s');
echo microtime(true) - $start;  // ~0.08s

$start = microtime(true);
for ($i = 0; $i < 100000; $i++) (new DateTime())->format('Y-m-d H:i:s');
echo microtime(true) - $start;  // ~0.35s
?>

速查卡片 (列印備用)

Y y L o  年份
m n F M t  月份
d j z    日期
w D l N W 星期
g h G H i s u 時間
a A      AM/PM
e T O P  時區
c r U    標準格式
S I B    其他

日期時間處理是業務邏輯高發區,建立統一 DateTimeHelper 工具類、全專案強制 DateTimeImmutable、資料庫存 DATETIME (UTC)、顯示時轉換用戶時區,能消除 90% 的時區 Bug。

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