將格式為 "YYYY-MM-DD HH:MM:SS" 的字串時間轉換為 Unix 時間戳(整數秒數),以便儲存、比較、運算。
<?php
$strtime = "2000-02-12 16:20:35";
// 步驟 1: 以 '-' 分割日期部分
$array = explode("-", $strtime);
$year = $array[0]; // 2000
$month = $array[1]; // 02
$rest = $array[2]; // "12 16:20:35"
// 步驟 2: 以 ':' 分割時間部分
$array = explode(":", $rest);
$minute = $array[1]; // 20
$second = $array[2]; // 35
// 步驟 3: 以空格分割 "12 16"
$array = explode(" ", $array[0]);
$day = $array[0]; // 12
$hour = $array[1]; // 16
// 步驟 4: 產生時間戳
$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
echo "字串時間:$strtime
";
echo "年:$year
";
echo "月:$month
";
echo "日:$day
";
echo "時:$hour
";
echo "分:$minute
";
echo "秒:$second
";
echo "轉換為 timestamp:$timestamp
";
echo "從 timestamp 轉回來:" . date("Y-m-d H:i:s", $timestamp) . "
";
?>
YYYY/MM/DD、DD.MM.YYYY、含時區)。<?php
$strtime = "2000-02-12 16:20:35";
$timestamp = strtotime($strtime);
echo "Timestamp: $timestamp
";
echo "Back: " . date("Y-m-d H:i:s", $timestamp) . "
";
// 支援多種格式
$formats = [
"2024-12-20 14:30:00",
"2024/12/20 14:30:00",
"20 Dec 2024 14:30:00",
"next Monday",
"+1 week 2 days",
"yesterday 10:00",
];
foreach ($formats as $f) {
echo "$f => " . date('Y-m-d H:i:s', strtotime($f)) . "
";
}
?>
strtotime() 使用 date.timezone 設定(php.ini 或 date_default_timezone_set())。DateTime。02/03/2024 美式=2月3日、歐式=3月2日,盡量用 ISO 8601 YYYY-MM-DD。<?php
$strtime = "2000-02-12 16:20:35";
// 建立 DateTime 物件(可指定時區)
$dt = new DateTime($strtime, new DateTimeZone('Asia/Taipei'));
// 取得 Unix 時間戳
$timestamp = $dt->getTimestamp(); // 或 $dt->format('U')
echo "Timestamp: $timestamp
";
echo "Formatted: " . $dt->format('Y-m-d H:i:s') . "
";
// 進階:從特定格式建立
$dt2 = DateTime::createFromFormat('Y-m-d H:i:s', $strtime, new DateTimeZone('UTC'));
if ($dt2) {
echo "Parsed OK: " . $dt2->format('c') . "
";
}
// 日期運算直觀易讀
$dt->modify('+1 week')->modify('+3 days')->setTime(9, 0, 0);
echo "一週三天後早上9點: " . $dt->format('Y-m-d H:i:s') . "
";
| 格式字元 | 說明 | 範例 |
|---|---|---|
| Y | 4 位數年份 | 2024 |
| m | 2 位數月份 (01-12) | 12 |
| d | 2 位數日期 (01-31) | 20 |
| H | 24 小時制 (00-23) | 14 |
| i | 分鐘 (00-59) | 30 |
| s | 秒數 (00-59) | 00 |
| u | 微秒 (PHP 5.2.2+) | 123456 |
| U | Unix 時間戳 | 1703074200 |
| c | ISO 8601 完整格式 | 2024-12-20T14:30:00+08:00 |
2024-12-20T14:30:00+08:00 → 直接用 new DateTime() 或 strtotime() 自動處理。2024年12月20日 14時30分 → 用 DateTime::createFromFormat('Y年m月d日 H時i分', $str)。strtotime($row['created_at']) 或 new DateTime($row['created_at'])。strtotime() 比 DateTime 快約 2-3 倍,百萬筆以上可考慮。strtotime() 最簡潔。DateTimeImmutable)。explode() + mktime() 有助理解時間戳構成,但生產環境請勿使用。