PHP-时间日期格式化后展示
相信很多小伙伴在平常上网的时候,经常会在一些网站和APP上看到文章日期处显示:刚刚、几分钟前、几小时前,昨天 12:00、前天 13:30 等时间展现方式,不得不说这样的展现方式粘在用户体验的角度上来看,还是非常舒适的。
相比直接显示生硬的年月日及时间点的,反而让人陷入了时间计算的一个盲区,对于微博、评论及新闻资讯类的文章列表,直接显示日期的方式展现体验显然有些格格不入了。
下面就让我们一起来看下时间格式化的实现方式吧
<?php
/**
* 文章时间格式化
* @param int|string $time 时间戳|日期
* @param bool $isYear 是否显示年份
* @return string
*/
function formatTime($time, $isYear = false) {
if(!$time) {
return '';
}
if (!is_numeric($time)) {
$time_new = strtotime($time);
if (!$time_new) {
return $time;
} else {
$time = $time_new;
}
}
$now = time();
if(($dur = $now - $time) <= 600) {
$time = '刚刚';
} elseif (date('Ymd', $now) == date('Ymd', $time)) {
if(($dur = $now - $time) < 3600) {
$temp = floor($dur/60);
if($temp == 60) {
$time = '1小时前';
} else {
$time = $temp . '分钟前';
}
} else {
$time = floor($dur/3600) . '小时前';
}
} else {
if(date('Ymd',strtotime('-1 day')) == date('Ymd', $time)) {
$time = sprintf('昨天 %s:%s', date('H', $time), date('i', $time));
} else {
if ($isYear && date('Y') > date('Y', $time)) {
$time = date('y-n-j', $time);
} else {
$time = sprintf('%s-%s', date('n', $time), date('j', $time));
}
}
}
return $time;
}
# 执行效果如下:
echo formatTime(time()); // 刚刚
echo formatTime(1682659570);// 昨天 05:26
echo formatTIme("-3 day"); // 4-26