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

PHP 時間戳與標準時間格式互轉完全指南

     編輯:PHP 相關知識

前言

在 PHP 開發中,時間戳與人類可讀的日期格式互轉是極其常見的需求。無論是從資料庫讀取 10 位數的 Unix 時間戳,還是需要將使用者輸入的日期存入資料庫,掌握正確的轉換方法都能讓開發事半功倍。本文將系統整理 PHP 時間處理的核心函式、常見陷阱與最佳實踐。

核心函式速查表

函式用途範例
time()取得目前 Unix 時間戳(整數)$now = time(); // 1700000000
date()格式化時間戳為字串date('Y-m-d H:i:s', $timestamp)
mktime()由日期時間元件產生時間戳mktime(0,0,0,12,4,2008)
strtotime()解析英文日期字串為時間戳strtotime('2008-12-04')

時間戳 → 標準日期

最直觀的方式是使用 date() 的第二個參數傳入時間戳:

$timestamp = 1228348800;
// 完整日期時間
echo date('Y-m-d H:i:s', $timestamp); // 2008-12-04 00:00:00
// 僅日期
echo date('Y-m-d', $timestamp);       // 2008-12-04

進階技巧: 若資料庫存的是字串型時間戳,記得先轉型:

$date3 = date('Y-m-d H:i:s', (int)"1228348800");

標準日期 → 時間戳

現代 PHP 建議使用 strtotime(),語意清晰且支援多種格式:

$dateStr = '2008-12-04';
$timestamp = strtotime($dateStr); // 1228348800

// 含時分秒
$timestamp = strtotime('2008-12-04 15:30:45');

舊版寫法(mktime() 拆解字串)已不推薦,易出錯且效能較差。

時區陷阱與解決方案

PHP 5.1+ 預設使用 UTC,若不設定時區,顯示時間會偏移 8 小時(中國標準時間)。三種解決方式:

方案 1:修改 php.ini(需重啟服務)

date.timezone = Asia/Shanghai

方案 2:程式碼開頭設定(推薦,可攜性佳)

date_default_timezone_set('Asia/Shanghai');

方案 3:執行期動態設定

ini_set('date.timezone', 'Asia/Shanghai');

常用時區識別碼:

  • 中國大陸:PRC、Asia/Shanghai、Asia/Chongqing、Asia/Urumqi
  • 港澳台:Asia/Hong_Kong、Asia/Macao、Asia/Taipei
  • 新加坡:Asia/Singapore

資料庫儲存建議

  • TIMESTAMP / DATETIME:原生日期型別,利於 SQL 篩選、排序、時區自動轉換。
  • INT (10/11):儲存 Unix 時間戳,跨語言、跨系統整合方便,但需應用層格式化。
  • 避免 用 VARCHAR 儲存格式化後的日期字串,查詢效能差且難維護。

完整範例:雙向轉換工具函式

/**
 * 將時間戳格式化為指定格式
 */
function formatTimestamp(int $timestamp, string $format = 'Y-m-d H:i:s'): string
{
    return date($format, $timestamp);
}

/**
 * 將日期字串解析為時間戳
 */
function parseDate(string $dateStr): ?int
{
    $ts = strtotime($dateStr);
    return $ts !== false ? $ts : null;
}

// 使用示例
$now = time();
echo "現在: " . formatTimestamp($now) . PHP_EOL;
echo "指定日: " . formatTimestamp(parseDate('2024-01-15') ?? 0) . PHP_EOL;

總結

  • 優先使用 date() + strtotime() 組合,語意明確、支援格式豐富。
  • 專案啟動時統一設定 date_default_timezone_set(),避免時區 Bug。
  • 資料庫選型視業務而定,但建議優先使用原生日期型別。
  • PHP 8.1+ 可考慮 DateTimeImmutable 物件導向寫法,型別安全更強。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved