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

PHP 日期時間轉時間戳:strtotime、mktime 與自定義函式完整教學

     編輯:PHP 相關知識

PHP 提供多種函式將日期字串轉為 Unix 時間戳(秒數),核心為 `strtotime()` 與 `mktime()`,另有 `gmmktime()` 處理 GMT 時間。

strtotime() - 解析英文文字日期

語法:`strtotime(string $time, int $now = time()) : int|false`

  • 支援相對時間:`"+1 day"`、`"next Monday"`、`"last day of next month"`。
  • 支援標準格式:`"2024-12-25 10:30:00"`、`"25 December 2024"`。
  • 失敗回傳 `false`(PHP 5.1+),舊版回傳 `-1`。
<?php
echo strtotime("2024-12-25 10:30:00"); // 1735122600
echo strtotime("+1 week");             // 一週後
echo strtotime("next Friday");         // 下個週五
echo strtotime("first day of January 2025"); // 2025-01-01 00:00:00
?>

mktime() - 從日期元件建立時間戳

語法:`mktime(int $hour, int $minute, int $second, int $month, int $day, int $year) : int|false`

  • 參數可從右往左省略,預設為當前本地時間對應值。
  • 自動處理溢位:`month=13` 視為次年 1 月,`day=32` 自動進位。
  • 適合日期運算與驗證。
<?php
echo mktime(14, 30, 0, 12, 25, 2024); // 2024-12-25 14:30:00

// 日期運算範例
echo date("Y-m-d", mktime(0,0,0, 12, 32, 2023)); // 2024-01-01 (自動進位)
// 取得某月最後一天
$lastDay = mktime(0,0,0, 3, 0, 2024); // 2024-02-29 (閏年)
echo date("Y-m-d", $lastDay);
?>

常見陷阱與最佳實踐

  • 時區:`strtotime` 依賴 `date.timezone` 設定,建議在腳本開頭 `date_default_timezone_set('Asia/Taipei')`。
  • 格式歧義:`"03/04/2024"` 美式為 3 月 4 日,歐式為 4 月 3 日。推薦用 ISO 8601 `YYYY-MM-DD` 或 `DateTime` 類別。
  • 32 位元系統:時間戳範圍限於 1901-2038,64 位元系統無此限制。

現代化替代方案:DateTime 類別 (PHP 5.2+)

<?php
$dt = new DateTime("2024-12-25 14:30:00", new DateTimeZone("Asia/Taipei"));
echo $dt->getTimestamp(); // 取得時間戳
echo $dt->format("U");    // 同樣取得時間戳

// 日期運算更直觀
$dt->modify("+1 month");
echo $dt->format("Y-m-d");
?>

自定義函式:嚴格格式驗證並轉換

<?php
function strToTimestamp($datetime) {
    // 嚴格匹配 Y-m-d H:i:s
    if (!preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $datetime)) {
        return time(); // 或拋出例外
    }
    list($date, $time) = explode(' ', $datetime);
    list($y, $m, $d) = explode('-', $date);
    list($h, $i, $s) = explode(':', $time);
    return gmmktime($h, $i, $s, $m, $d, $y); // 使用 GMT 避免時區影響
}

echo strToTimestamp("2024-12-25 14:30:00");
?>

總結建議

場景推薦函式
解析使用者輸入、相對時間strtotime()
精確控制年月日時分秒、日期運算mktime() / DateTime
跨時區、國際化專案DateTime + DateTimeZone
固定格式高效能解析自定義 + gmmktime
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved