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

PHP date() 日期時間格式化完整參考:格式字元對照、時區處理、DateTime 物件導向用法

     編輯:PHP 相關知識

date() 格式字元完整對照表

字元說明範例
Y4 位數年2024
y2 位數年24
m月份(01-12)01
n月份(1-12)不補零1
F月份完整英文名January
M月份縮寫Jan
d日期(01-31)05
j日期(1-31)不補零5
D星期縮寫Mon
l星期完整名Monday
NISO-8601 星期(1=週一..7=週日)1
w星期(0=週日..6=週六)0
H24 小時(00-23)14
G24 小時不補零14
h12 小時(01-12)02
g12 小時不補零2
i分鐘(00-59)05
s秒(00-59)09
aam/pm 小寫pm
AAM/PM 大寫PM
u微秒(PHP 5.2.2+)123456
UUnix 時間戳1704432309
z年內第幾天(0-365)4
WISO-8601 週數01
t該月總天數31
S英文序數後綴st, nd, rd, th
cISO 8601 格式2024-01-05T14:05:09+08:00
rRFC 2822 格式Fri, 05 Jan 2024 14:05:09 +0800

常用格式範例

<?php
echo date('Y-m-d H:i:s');        // 2024-01-05 14:05:09
echo date('Y/m/d');              // 2024/01/05
echo date('l, F jS, Y');         // Friday, January 5th, 2024
echo date('D, d M Y H:i:s O');   // Fri, 05 Jan 2024 14:05:09 +0800
echo date('c');                  // 2024-01-05T14:05:09+08:00 (ISO 8601)
echo date('Y-m-d\TH:i:sP');      // 同 c,手動指定
?>

時區處理

<?php
// 設定預設時區(腳本開頭或 php.ini)
date_default_timezone_set('Asia/Taipei');

// 或 DateTime 物件指定時區
$dt = new DateTime('now', new DateTimeZone('UTC'));
echo $dt->format('Y-m-d H:i:s'); // UTC 時間

// 轉換時區
$dt->setTimezone(new DateTimeZone('Asia/Tokyo'));
echo $dt->format('Y-m-d H:i:s'); // 東京時間
?>

DateTime 物件導向用法(推薦)

<?php
// 建立
$dt = new DateTime();                    // 現在
$dt = new DateTime('2024-01-05 14:05');  // 字串解析
$dt = DateTime::createFromFormat('Y/m/d', '2024/01/05'); // 指定格式

// 運算
$dt->modify('+1 day');
$dt->add(new DateInterval('P1M'));      // 加 1 月
$dt->sub(new DateInterval('PT1H'));     // 減 1 小時

// 差值
$diff = $dt1->diff($dt2);
echo $diff->format('%a 天 %h 小時 %i 分鐘');

// 格式化
echo $dt->format('Y-m-d H:i:s');

// 靜態工廠
$dt = DateTimeImmutable::createFromFormat('Y-m-d', '2024-01-05'); // 不可變
?>

時間戳互轉

<?php
// Unix 時間戳 → DateTime
$dt = DateTime::createFromFormat('U', '1704432309');
$dt->setTimezone(new DateTimeZone('Asia/Taipei'));

// DateTime → 時間戳
$timestamp = $dt->getTimestamp(); // 或 $dt->format('U')

// 微秒精度
$dt = new DateTime();
echo $dt->format('Y-m-d H:i:s.u'); // 2024-01-05 14:05:09.123456
?>

最佳實踐

  • 新專案優先使用 DateTime/DateTimeImmutable,避免 date() 時區副作用
  • 資料庫儲存 TIMESTAMP 或 DATETIME,應用層統一 UTC
  • 使用者顯示時依偏好時區轉換
  • 避免字串拼接日期,使用 DateInterval 運算
  • 序列化傳輸用 ISO 8601 (c 格式)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved