PHP-时间格式化显示(刚刚、几分钟前、几小时前、昨天等)

原文地址:https://www.ngxcode.com/archives/279.html

相信很多小伙伴在平常上网的时候,经常会在一些网站和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


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangnbx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值