PHP 處理日期時間最常用的是 strtotime() 將英文文字描述轉為 Unix 時間戳,以及 date() 將時間戳格式化為可讀字串。掌握這兩個函數搭配相對時間語法,能輕鬆應對各種業務場景。
// 輸出:世界末日時間戳為:1356019200
echo "世界末日時間戳為:" . strtotime("2012-12-21");
// 輸出:2008-12-04 00:00:00
echo date('Y-m-d H:i:s', "1228348800");
strtotime() 支援豐富的英文相對時間描述,以下為常用範例:
// 當前時間
echo date("Y-m-d H:i:s", time());
// 明天此時
echo date("Y-m-d H:i:s", strtotime("+1 day"));
// 昨天此時
echo date("Y-m-d H:i:s", strtotime("-1 day"));
echo date("Y-m-d H:i:s", strtotime("+1 week"));
echo date("Y-m-d H:i:s", strtotime("-1 week"));
// 下個星期四
echo date("Y-m-d H:i:s", strtotime("next Thursday"));
// 上個星期四
echo date("Y-m-d H:i:s", strtotime("last Thursday"));
結合 mktime() 或 date(),即可實現任意日期時間的精準運算。
專案中常需將儲存的時間戳轉為人類易讀的相對時間。以下是兩個經過優化的函數,解決跨年顯示年份、邊界條件判斷等問題。
function mdate($time = NULL) {
$text = '';
$time = $time === NULL || $time > time() ? time() : intval($time);
$t = time() - $time; // 時間差(秒)
$y = date('Y', $time) - date('Y', time()); // 是否跨年
switch($t){
case $t == 0:
$text = '剛剛';
break;
case $t < 60:
$text = $t . '秒前';
break;
case $t < 60 * 60:
$text = floor($t / 60) . '分鐘前';
break;
case $t < 60 * 60 * 24:
$text = floor($t / (60 * 60)) . '小時前';
break;
case $t < 60 * 60 * 24 * 3:
// 昨天/前天 顯示具體時間
$text = floor($time/(60*60*24)) == 1 ? '昨天 ' . date('H:i', $time) : '前天 ' . date('H:i', $time);
break;
case $t < 60 * 60 * 24 * 30:
// 一個月內 顯示月日時分
$text = date('m月d日 H:i', $time);
break;
case $t < 60 * 60 * 24 * 365 && $y == 0:
// 同一年內 顯示月日
$text = date('m月d日', $time);
break;
default:
// 跨年或超過一年 顯示完整年月日
$text = date('Y年m月d日', $time);
break;
}
return $text;
}
function formatDate($sTime) {
$cTime = time();
$dTime = $cTime - $sTime;
$dDay = intval(date("Ymd", $cTime)) - intval(date("Ymd", $sTime));
$dYear = intval(date("Y", $cTime)) - intval(date("Y", $sTime));
if ($dTime < 60) {
$dTime = $dTime . "秒前";
} elseif ($dTime < 3600) {
$dTime = intval($dTime/60) . "分鐘前";
} elseif ($dTime >= 3600 && $dDay == 0) {
$dTime = "今天" . date("H:i", $sTime);
} elseif ($dYear == 0) {
$dTime = date("m-d H:i", $sTime);
} else {
$dTime = date("Y-m-d H:i", $sTime);
}
return $dTime;
}
Common/common.php(框架自動載入)。{$vo.time|mdate} 或 {$vo.time|formatDate}。掌握 strtotime 的相對時間語法,配合 date 格式化,能解決 90% 的日期運算需求。對於前端顯示,建議封裝成工具函數統一管理,確保專案風格一致且易於維護。