PHP如何把时间转换为几分钟前/几小时前等友好格式?
我就是不喜欢说废话, 虽然总是因为字数太少不被官方推荐.
推荐两种实现方式:
第一种, 使用大佬的composer类库
composer require zjkal/time-helper
然后调用即可:
//一共2个参数:
//第1个参数传入字符串类型的时间或者时间戳都可以,
//第2个参数为语言(默认为中文,需要英文请传入en)
TimeHelper::toFriendly('2022-3-2 10:15:33');
//英文
TimeHelper::toFriendly(1646186290, 'en');
第二种,自行实现,并调用,代码如下:
public static function friendly_date($time, int $max_days = 365, string $format = 'Y年m月d日', string $lang = 'zh')
{
$time = self::toTimestamp($time);
$now_time = time();
if ($time > $now_time) {
return date($format, $time);
}
$z = date('z', $time);//当前的第几天
$now_days = date('z', $now_time);
if ($z > $now_days) {
$now_days += 365;
}
$diff_days = $now_days - $z;//获取差异天
$diffs = $now_time - $time;//获取差异秒
if ($diff_days >= $max_days) {
return date($format, $time);
} elseif ($diff_days >= 2) {
return $diff_days . ($lang == 'zh' ? '天前' : ' days ago');
} elseif ($diff_days >= 1) {
return $lang == 'zh' ? '昨天' : 'yesterday';
} elseif ($diffs >= 3600) {
return floor($diffs / 3600) . ($lang == 'zh' ? '小时前' : ' hours ago');
} elseif ($diffs >= 60) {
return floor($diffs / 60) . ($lang == 'zh' ? '分钟前' : ' minutes ago');
} elseif ($diffs >= 10) {
return $diffs . ($lang == 'zh' ? '秒前' : ' seconds ago');
} else {
return $lang == 'zh' ? '刚刚' : 'just';
}
}