来一张效果图:
需求:
根据一个时间戳返回带有描述或日期的友好时间提示
实现效果类似于上面图片,提示语可以自定义,时间跨度也可以根据需求调整,比如五分钟内显示“刚刚”,超过半年显示“年-月-日”等
function friendlyTime($timestamp)
{
if (empty($timestamp)) {
return '刚刚';
}
$now = time();
$diff = $now - $timestamp;
// 定义时间间隔阈值
$second = 1;
$minute = 60 * $second;
$hour = 60 * $minute;
$day = 24 * $hour;
$month = 30 * $day;
$year = 12 * $month;
// 根据时间差返回友好提示
if ($diff < $minute) {
return '刚刚';
} elseif ($diff < $hour) {
$mins = floor($diff / $minute);
return $mins . '分钟前';
} elseif ($diff < $day) {
$hours = floor($diff / $hour);
return $hours . '小时前';
} elseif ($diff < $month) {
$days = floor($diff / $day);
return $days . '天前';
} elseif ($diff < $year) {
$months = floor($diff / $month);
return $months . '月前';
} else {
return date('Y年m月d日', $timestamp);
}
}
// 使用示例
$timestamp = strtotime('-30 minutes'); // 30分钟前的时间戳
echo friendlyTime($timestamp); // 输出 "30分钟前"
1,上面写法是按秒计算比如:
需要比较的时间是1年前: $year = 1(秒)*60(60秒即1分钟)*60(60分钟即1小时)*24(24小时即1天)*30(30天即1个月)*12(12个月即1年)
得到的是一个固定的秒数,不考虑是否闰年闰月情况 $year = 1*60*60*24*30*12
2,还有一种计算方法,实时计算当前闰年闰月情况:,
$year = $timestamp - mktime(0, 0, 0, 0, 0, date('Y')); 当前年的0点0分0秒
$month = $timestamp - mktime(0, 0, 0, date('m'), 0, date('Y')); 当前月的0点0分0秒
第一种就可以满足基本需求,想要更精确计算用第二种