在 PHP 開發中,處理日期與時間是家常便飯。無論是記錄日誌、計算時間差、排程任務,還是顯示使用者友善的相對時間(如「3 分鐘前」),核心都離不開 Unix 時間戳 與 日期字串 的互相轉換。本文將系統整理 strtotime()、date()、mktime() 等關鍵函式,並透過大量實戰範例,助你輕鬆駕馭時間運算。
| 函式 | 用途 | 回傳值 |
|---|---|---|
strtotime("英文日期描述") | 將英文文字日期解析為 Unix 時間戳 | 整數 (秒數) 或 false |
date("格式", 時間戳) | 將時間戳格式化為可讀日期字串 | 字串 |
mktime(時,分,秒,月,日,年) | 依指定日期時間建立時間戳 | 整數 |
time() | 取得目前 Unix 時間戳 | 整數 |
<?php
// 取得 2009-01-22 00:00:00 的時間戳
echo strtotime("2009-1-22"); // 輸出:1232553600
?>
說明:若未指定時間,預設為當天 00:00:00。
strtotime() 支援豐富的相對格式,配合 date() 即可輕鬆算出「明天這時」、「上週三」等時間點。
+1 day / -1 day:明天 / 昨天同一時間+1 week / -1 week:下週 / 上週同一時間next Thursday:下個星期四 (00:00:00)last Thursday:上個星期四 (00:00:00)first day of next month:下個月第一天last day of:本月最後一天<?php
$now = time();
echo "現在:" . date("Y-m-d H:i:s", $now) . "<br>";
// 2009-01-22 09:40:25
echo "明天這時:" . date("Y-m-d H:i:s", strtotime("+1 day")) . "<br>";
// 2009-01-23 09:40:25
echo "上週四:" . date("Y-m-d H:i:s", strtotime("last Thursday")) . "<br>";
// 2009-01-15 00:00:00
?>
mktime() 產生特定時間戳當需要精確控制「時、分、秒」時,mktime() 比字串解析更直觀:
<?php
// 產生 2024 年農曆除夕 23:59:59 的時間戳
$timestamp = mktime(23, 59, 59, 2, 9, 2024); // 2024-02-09 23:59:59
echo date("Y-m-d H:i:s", $timestamp);
?>
php.ini 設定 date_default_timezone_set('Asia/Taipei');,避免時間偏移。DateTime 類別。DateTime 物件導向介面:PHP 5.2+ 內建 DateTime、DateInterval、DatePeriod,處理複雜日期運算(如「每月倒數第二天」)更安全、可讀性更高。掌握 strtotime() 的英文解析能力,搭配 date() 格式化輸出,即可解決 90% 的日期時間需求。若專案涉及跨時區、複雜排程,請升級使用 DateTime 類別,寫出更健壯、可維護的程式碼。