PHP 提供多種函式將日期字串轉為 Unix 時間戳(秒數),核心為 `strtotime()` 與 `mktime()`,另有 `gmmktime()` 處理 GMT 時間。
語法:`strtotime(string $time, int $now = time()) : int|false`
<?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(int $hour, int $minute, int $second, int $month, int $day, int $year) : int|false`
<?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);
?>
<?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 |