php 1个小时之后,工学1号馆 » PHP把时间转换成几分钟前、几小时前、几天前

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

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 . '前';

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值