工学1号馆

home

« | 返回首页 | »

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

By Wu Yudong on March 01, 2019

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

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分钟前';
}

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

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

Comments

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