首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 與 PHP 時間戳互轉函數速查:FROM_UNIXTIME、UNIX_TIMESTAMP、date、strtotime 完整對照表

     編輯:MySQL 資料庫相關知識

時間戳(Unix Timestamp,秒數)與人類可讀日期時間(YYYY-MM-DD HH:MM:SS)互轉是開發高頻操作。MySQL 與 PHP 均提供原生函數,建議在資料庫層完成轉換以減少網路傳輸與時區歧義,但應用層轉換亦常見,備查速查表如下。

MySQL 原生函數(推薦在 SQL 直接處理)

方向函數範例結果
Timestamp → DatetimeFROM_UNIXTIME(ts)SELECT FROM_UNIXTIME(1156219870);2006-10-22 12:31:10
Datetime → TimestampUNIX_TIMESTAMP(dt)SELECT UNIX_TIMESTAMP('2006-11-04 12:23:00');1162614180
格式化輸出DATE_FORMAT(FROM_UNIXTIME(ts), fmt)DATE_FORMAT(FROM_UNIXTIME(ts), '%Y-%m-%d')2006-10-22

實用查詢:當天記錄數

SELECT * FROM message
WHERE DATE_FORMAT(FROM_UNIXTIME(chattime), '%Y-%m-%d') = DATE_FORMAT(NOW(), '%Y-%m-%d')
ORDER BY id DESC;

⚠️ 效能提示:對大表,WHERE 使用函數會導致索引失效。優化寫法:
WHERE chattime >= UNIX_TIMESTAMP(DATE(NOW())) AND chattime < UNIX_TIMESTAMP(DATE(NOW()) + INTERVAL 1 DAY)
利用 chattime 整數索引做範圍查詢,極速命中。

PHP 原生函數(應用層處理)

方向函數範例結果
Timestamp → 格式化字串date(format, ts)date('Y-m-d H:i:s', 1156219870);2006-10-22 12:31:10
日期字串 → Timestampstrtotime(datetime_str)strtotime('2010-03-24 08:15:42');1269392142
DateTime 物件(推薦)(new DateTime('@'.$ts))->format('Y-m-d H:i:s')支援時區、微秒、鏈式操作現代寫法

時區陷阱與最佳實踐

  • 資料庫存儲:統一存 INT UNSIGNED Unix Timestamp(UTC),或 DATETIME(不帶時區,應用層約定 UTC)。避免 存帶時區字串。
  • 連線時區:PHP date_default_timezone_set('UTC'),MySQL SET time_zone = '+00:00',雙端對齊。
  • 跨時區顯示:儲存 UTC,前端按用戶時區轉換展示(JS Intl.DateTimeFormat 或後端 DateTime::setTimezone)。
  • 2038 年問題:32 位系統 Timestamp 上限 2038-01-19。MySQL 5.6.4+ / PHP 64 位環境已支援 64 位時間戳,確保編譯與運行環境為 64 位。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved