优化时间显示为几分钟、几小时前的程序实现方法
经常在我们访问一些博客、资讯等网站时,会看到一些文章前端显示的发布时间显示为几小时前,几周前,这样的时间显示在用户体验上比传统的某年某月某日好很多,显然这种效果的实现,最易操作的还是通过程序语言来控制输出,那么在程序端,我们该如何实现合种效果呢?
解决的思路就是在输出时间时,对时间进行实时加工。文章发布时间为过去的某个时间点,因此,我们可以使用当前时间与文章发布时间的时间戳之差来进行判断后优化时间输出,如:
当前时间 - 发布时间 > 24*60*60,则文章为一天前所发布的。更详细的代码实现如下:
/**
* 时间重写美化
* @param int $time 时间字符串
* @return string
*/
function formatTime(string $time = ''): string
{
$time = $time == '' ? time() : strtotime($time);
$diff = time() - $time;
$text = '';
switch ($diff) {
case $diff <= 10:
$text = '刚刚';
break;
case $diff < 60:
$text = $diff . ' 秒前';
break;
case $diff < (60 * 60):
$text = floor($diff / 60) . ' 分钟前';
break;
case $diff < (60 * 60 * 24):
$text = floor($diff / (60 * 60)) . ' 小时前';
break;
case $diff < (60 * 60 * 24 * 3):
$text = floor($diff / (60 * 60 * 24)) == 1 ?
'昨天 ' . date('H:i', $diff) :
'前天 ' . date('H:i', $diff);
break;
case $diff < (60 * 60 * 24 * 365):
$text = date('m-d H:i', $time);
break;
default:
$text = date('Y年m月d日', $time);
break;
}
return $text;
}
这段代码里,我们是对时间字符串先转为时间戳,再进行转化的,大家如果使用的是时间戳,那么可以去掉转换的步骤。
另外,做前端切图工作的童鞋也要注意了,如果是在文章列表中,存在时间及其他的附加信息(比如文章阅读量)时,大部分前端开发者都是采用的浮动布局,但在优化时间显示之后,时间部分的长度就不统一了,此时会有错位感,需要使用flex对附加信息部分进行重新布局,或者给时间部分给固定宽度值。

CSS颜色函数--rgb()、rgba()的语法和使用
rgb()函数和rgba()函数是前端切图工作当中经常用到的颜色函数,根据光学三原色红(red)、绿(green)、蓝(blue)三种颜色的不同分量进行混合后来
CSS最大值计算函数--max()函数的定义和使用
max()函数的作用是从一系列用逗号分割的参数中选取最大的一个,作为属性值,参数可以是直接数值,字面量、数学表达式、css函数等,支持嵌套。与min()函数的作
后台发布文章时自动保存草稿功能的实现
“正在系统后台编辑文章,顺手看了下群里的视频,关视频的时候不小心连网页一起关闭了,写了大半的文章说没就没了?”,相信很多人都遇到过这种场景,辛辛苦苦码了半天的字
WebStorm中如何配置SCSS
WebStorm是一款很优秀的用于前端开发的IDE,用于开发基于HTML、CSS、JS等的应用时非常应手,当然JetBrains旗下的其他IDE,如PHPSto
富文本编辑器CKEditor5接入指南
在后端制作CMS等需要用到富文本编辑器的时候,经常会陷入选择困难症,众所周知,目前市面上的富文本编辑器大概有数十种,比如百度的ueditor、TinyMCE、w
CSS函数整理,CSS函数的使用方法
有很多前端切图人员对CSS函数这个名词有些陌生,事实上有很多CSS函数我们经常在代码中使用,只是我们没有意识到而已。像我们常见的定义颜色值的rgb、rgba都属
CSS颜色函数--rgb()、rgba()的语法和使用
rgb()函数和rgba()函数是前端切图工作当中经常用到的颜色函数,根据光学三原色红(red)、绿(green)、蓝(blue)三种颜色的不同分量进行混合后来
CSS最大值计算函数--max()函数的定义和使用
max()函数的作用是从一系列用逗号分割的参数中选取最大的一个,作为属性值,参数可以是直接数值,字面量、数学表达式、css函数等,支持嵌套。与min()函数的作