社交動態、評論系統常需顯示「幾分鐘前」、「3 天前」等相對時間。本文提供一個完整的 ago() 函數,支援秒、分、時、天等多級精度,並處理邊界條件。
<?php
function ago($time) {
$time = strtotime($time);
$delta = time() - $time;
if ($delta < 60) {
return 'less than a minute ago';
} elseif ($delta < 120) {
return 'about a minute ago';
} elseif ($delta < 45 * 60) {
return floor($delta / 60) . ' minutes ago';
} elseif ($delta < 90 * 60) {
return 'about an hour ago';
} elseif ($delta < 24 * 60 * 60) {
return 'about ' . floor($delta / 3600) . ' hours ago';
} elseif ($delta < 48 * 60 * 60) {
return '1 day ago';
} else {
return floor($delta / 86400) . ' days ago';
}
}
// 使用範例
echo ago('2024-01-15 10:30:00'); // 輸出類似 "3 days ago"
?>
function ago_zh($time) {
$time = strtotime($time);
$delta = time() - $time;
if ($delta < 60) return '剛剛';
if ($delta < 120) return '1 分鐘前';
if ($delta < 45 * 60) return floor($delta / 60) . ' 分鐘前';
if ($delta < 90 * 60) return '約 1 小時前';
if ($delta < 24 * 60 * 60) return '約 ' . floor($delta / 3600) . ' 小時前';
if ($delta < 48 * 60 * 60) return '1 天前';
if ($delta < 30 * 86400) return floor($delta / 86400) . ' 天前';
if ($delta < 365 * 86400) return floor($delta / (30 * 86400)) . ' 個月前';
return floor($delta / (365 * 86400)) . ' 年前';
}
DateTime 物件與時區處理。$delta。此函數邏輯清晰、無外部依賴,可直接複製到專案中使用。根據產品語言需求調整回傳字串即可滿足多數相對時間顯示場景。