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

PHP 5.1+ 日期時間常量完整指南與最佳實踐

     編輯:PHP 相關知識

引言

自 PHP 5.1.1 起,核心引入了一組預定義日期時間常量,涵蓋主流標準格式(ISO、RFC、RSS、ATOM 等)。直接配合 date()、DateTime::format() 使用,無需手寫複雜格式字符串,減少錯誤並提升代碼可讀性。

常量完整對照表

常量名標準名稱輸出示例適用場景
DATE_ATOMAtom (RFC 3339)2024-05-20T14:30:00+08:00Atom Feed、API 時間戳
DATE_COOKIEHTTP CookieMonday, 20-May-2024 14:30:00 UTCCookie Expires 屬性
DATE_ISO8601ISO-86012024-05-20T14:30:00+0800通用數據交換(注意:無冒號時區)
DATE_RFC822RFC 822Mon, 20 May 2024 14:30:00 +0800早期 Email 標頭
DATE_RFC850RFC 850Monday, 20-May-24 14:30:00 UTC舊版 HTTP/Email
DATE_RFC1036RFC 1036Mon, 20 May 24 14:30:00 +0800Usenet/Email
DATE_RFC1123RFC 1123Mon, 20 May 2024 14:30:00 +0800HTTP/1.1 Date 標頭(推薦)
DATE_RFC2822RFC 2822Mon, 20 May 2024 14:30:00 +0800現代 Email (RFC 5322 基礎)
DATE_RFC3339RFC 33392024-05-20T14:30:00+08:00XML/JSON API、Atom(同 DATE_ATOM)
DATE_RSSRSSMon, 20 May 2024 14:30:00 +0800RSS 2.0
DATE_W3CW3C2024-05-20T14:30:00+08:00HTML5

實戰代碼示例

1. 生成 RSS 2.0 合規發布時間

<?php
// 設置時區(必須)
date_default_timezone_set('Asia/Shanghai');

// 直接使用常量
$pubDate = date(DATE_RSS);  // Mon, 20 May 2024 14:30:00 +0800

// 或使用 DateTime 物件(更現代、鏈式調用)
$dt = new DateTime();
$pubDate = $dt->format(DATE_RSS);

echo "<pubDate>$pubDate</pubDate>";
?>

2. API 統一返回 ISO 8601 (RFC 3339) 格式

function jsonResponse($data, $status = 200) {
    http_response_code($status);
    return json_encode([
        'timestamp' => (new DateTime())->format(DATE_ATOM),
        'data' => $data
    ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
}

3. Sitemap.lastmod 符合 W3C 標準

$lastmod = (new DateTime($article->updated_at))->format(DATE_W3C);
// 輸出:2024-05-20T14:30:00+08:00

常見陷阱與注意事項

  • 時區設置:未設置 date_default_timezone_set() 會觸發 E_WARNING 並預設 UTC
  • DATE_ISO8601 缺陷:輸出 +0800 無冒號,不符合嚴格 RFC 3339,**推薦改用 DATE_ATOM 或 DATE_RFC3339**
  • PHP 7.0+ 新增 DATE_RFC3339 常量,語義更明確
  • 配合 DateTimeImmutable 避免狀態修改副作用

擴展:自定義格式常量

項目中可定義業務專用常量,統一維護:

// config/constants.php
define('DATE_API_STANDARD', DATE_ATOM);      // API 統一格式
define('DATE_LOG_FILE', 'Y-m-d H:i:s.u');    // 日誌高精度
define('DATE_UI_DISPLAY', 'Y年m月d日 H:i');  // 前端展示

最佳實踐:優先使用內建常量而非魔術字符串;統一時區管理;API 輸出採用 DATE_ATOM/DATE_RFC3339;日誌記錄可自定義高精度格式。

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