guangzhou



shanghai

Recent posts:
Blog index
About
RSS

PHP把时间转换成几分钟前、几小时前、几天前

March 01, 2019     ThinkPHP   599   

项目中的留言板和论坛的帖子都需要显示时间,时间的显示希望做成显示如:“几分钟前、几小时前、几天前”的样式,简单的代码如下:

function time_ago($agoTime)
{
    $agoTime = (int)$agoTime;
    
    // 计算出当前日期时间到之前的日期时间的毫秒数,以便进行下一步的计算
    $time = time() - $agoTime;
    
    if ($time >= 31104000) { // N年前
        $num = (int)($time / 31104000);
        return $num.'年前';
    }
    if ($time >= 2592000) { // N月前
        $num = (int)($time / 2592000);
        return $num.'月前';
    }
    if ($time >= 86400) { // N天前
        $num = (int)($time / 86400);
        return $num.'天前';
    }
    if ($time >= 3600) { // N小时前
        $num = (int)($time / 3600);
        return $num.'小时前';
    }
    if ($time > 60) { // N分钟前
        $num = (int)($time / 60);
        return $num.'分钟前';
    }
    return '1分钟前';
}

这段代码来自网上,本来就难度不大,懒得自己写了。我这里修改一下,放在模型的获取器中。

表中的时间字段是addtime,存储类型为int

public function getAddtimeAttr($value, $data)
{
	$addtime = $data['addtime'];
	$time = time() - $addtime; //获取帖子发布时间与当前时间的差值
	
	if ($time >= 604800) { // 7天前的时间显示实际时间
		return date('Y-m-d H:i:s', $addtime);
	}
	if ($time >= 86400) { // N天前
		$num = (int)($time / 86400);
		return $num.'天前';
	}
	if ($time >= 3600) { // N小时前
		$num = (int)($time / 3600);
		return $num.'小时前';
	}
	if ($time > 60) { // N分钟前
		$num = (int)($time / 60);
		return $num.'分钟前';
	}
	return '1分钟前';
}

这样在控制器中直接调用就行了


最近我使用一种改进的代码,这样能更加精确的显示:

public function getCreatetimeAttr($value, $data)
{
    $addtime = $data['createtime'];
    $time = time() - $addtime; //获取帖子发布时间与当前时间的差值
    $f = array(
        '31536000' => '年',
        '2592000' => '个月',
        '604800' => '星期',
        '86400' => '天',
        '3600' => '小时',
        '60' => '分钟',
        '1' => '秒'
    );
    foreach ($f as $k => $v) {
        if (0 != $c = floor($time / (int)$k)) {
            return $c . $v . '前';
        }
    }
}

 

如果文章对您有帮助,欢迎点击下方按钮打赏作者

Comments

No comments yet.
To verify that you are human, please fill in "七"(required)