PHP date() 函數格式化 Unix 時間戳完整指南
date() 是 PHP 最常用的日期時間格式化函數,將 Unix 時間戳按指定格式轉換為可讀字符串。掌握其格式字符是處理日期顯示、日誌記錄、數據導出等任務的基礎。
語法原型
string date ( string $format [, int $timestamp = time() ] )
核心格式字符分類速查
| 類別 | 字符 | 說明 | 示例 |
| 年 | Y | 4 位數年份 | 2024 |
| y | 2 位數年份 | 24 |
| L | 是否閏年(1/0) | 1 |
| o | ISO-8601 年份 | 2024 |
| 類別 | 字符 | 說明 | 示例 |
| 月 | m | 兩位數月份 | 01-12 |
| n | 無前導零月份 | 1-12 |
| F | 月份全稱 | January |
| M | 月份縮寫 | Jan |
| 類別 | 字符 | 說明 | 示例 |
| 日 | d | 兩位數日期 | 01-31 |
| j | 無前導零日期 | 1-31 |
| z | 年內第幾天 | 0-365 |
| S | 序數後綴 | st, nd, rd, th |
| t | 當月總天數 | 28-31 |
| 類別 | 字符 | 說明 | 示例 |
| 時間 | H | 24小時制(00-23) | 13 |
| h | 12小時制(01-12) | 01 |
| i | 分鐘(00-59) | 05 |
| s | 秒(00-59) | 09 |
| 類別 | 字符 | 說明 | 示例 |
| 時區/完整格式 | r | RFC 2822 | Thu, 21 Dec 2000 16:01:07 +0200 |
| c | ISO 8601 | 2004-02-12T15:19:21+00:00 |
| U | Unix 時間戳 | 1261811391 |
實戰代碼示例
<?php
// 設置時區(重要!避免警告)
date_default_timezone_set('Asia/Shanghai');
echo "頁面加載時的本地時間:\n";
echo 'RFC 2822: ' . date('r') . "\n";
echo '完整日期: ' . date('F j, Y') . "\n"; // December 26, 2009
echo '簡短日期: ' . date('M j, Y') . "\n"; // Dec 26, 2009
echo '數字日期: ' . date('m/d/y') . "\n"; // 12/26/09
echo '序數日期: ' . date('jS \o\f M, Y') . "\n"; // 26th of Dec, 2009
echo '12小時制: ' . date('g:i:s A T') . "\n"; // 7:09:51 AM CST
echo '24小時制: ' . date('H:i:s O') . "\n"; // 07:09:51 +0800
// 判斷閏年
echo date('Y');
echo date('L') ? ' 是閏年' : ' 非閏年';
echo "\n";
// 從 Unix 紀元經過的秒數
echo time() . ' 秒已經過自 1970-01-01 00:00:00 UTC';
?>
輸出示例(假設時區為 CST)
頁面加載時的本地時間:
RFC 2822: Sat, 26 Dec 2009 07:09:51 +0800
完整日期: December 26, 2009
簡短日期: Dec 26, 2009
數字日期: 12/26/09
序數日期: 26th of Dec, 2009
12小時制: 7:09:51 AM CST
24小時制: 07:09:51 +0800
2009 非閏年
1261811391 秒已經過自 1970-01-01 00:00:00 UTC
最佳實踐建議
- 務必設置時區:在 php.ini 中配置
date.timezone 或腳本開頭調用 date_default_timezone_set(),否則 PHP 5.1+ 會拋出 E_WARNING。
- 優先使用 DateTime 類(PHP 5.3+):
new DateTime('@' . $timestamp)->setTimezone(new DateTimeZone('Asia/Shanghai'))->format('Y-m-d H:i:s'),支持鏈式調用、時區轉換、日期運算,代碼更健壯。
- 避免直接拼接字符串:使用預定義常量如
DATE_RFC2822、DATE_ISO8601、DATE_ATOM 等提高可讀性。