资讯专栏INFORMATION COLUMN

分享一段PHP格式化时间戳的代码,可以把时间戳转化成几天前,几个月前的格式

everfly / 2900人阅读

摘要:格式化时间戳中一般显示时间比较新的文章需要显示几分钟前,几天前这样,但是一般数据库里面记录的都是时间戳至少我习惯这样,所以就需要一个转化的过程,根据网上的资料加上自己的修改整理封装了两段代码下面是封装好的方法刚刚秒前分钟前小时前天前或

格式化时间戳 tags: PHP

CMS中一般显示时间比较新的文章需要显示几分钟前,几天前这样,但是一般数据库里面记录的都是时间戳(至少我习惯这样),所以就需要一个转化的过程,根据网上的资料加上自己的修改整理封装了两段代码

下面是封装好的方法

function formatTime($time) {
        $time = (int) substr($time, 0, 10);
        $int = time() - $time;
        $str = "";
        if ($int <= 2){
            $str = sprintf("刚刚", $int);
        }elseif ($int < 60){
            $str = sprintf("%d秒前", $int);
        }elseif ($int < 3600){
            $str = sprintf("%d分钟前", floor($int / 60));
        }elseif ($int < 86400){
            $str = sprintf("%d小时前", floor($int / 3600));
        }elseif ($int < 2592000){
            $str = sprintf("%d天前", floor($int / 86400));
        }else{
            $str = date("Y-m-d H:i:s", $time);
        }
        return $str;
    }

或者 更详细的

    public static function formatTime($time)
    {
        if (is_int($time)) {
            $time = intval($time);
        } elseif ($time instanceof Carbon) {
            $time = intval(strtotime($time));
        } else {
            return "";
        }
        $ctime = time();
        $t = $ctime - $time; //时间差 (秒)

        if ($t < 0) {
            return date("Y-m-d", $time);
        }

        $y = intval(date("Y", $ctime) - date("Y", $time));//是否跨年


        if ($t == 0) {
            $text = "刚刚";
        } elseif ($t < 60) {//一分钟内
            $text = $t . "秒前";
        } elseif ($t < 3600) {//一小时内
            $text = floor($t / 60) . "分钟前";
        } elseif ($t < 86400) {//一天内
            $text = floor($t / 3600) . "小时前"; // 一天内
        } elseif ($t < 2592000) {//30天内
            if ($time > strtotime(date("Ymd", strtotime("-1 day")))) {
                $text = "昨天";
            } elseif ($time > strtotime(date("Ymd", strtotime("-2 days")))) {
                $text = "前天";
            } else {
                $text = floor($t / 86400) . "天前";
            }
        } elseif ($t < 31536000 && $y == 0) {//一年内 不跨年
            $m = date("m", $ctime) - date("m", $time) - 1;

            if ($m == 0) {
                $text = floor($t / 86400) . "天前";
            } else {
                $text = $m . "个月前";
            }
        } elseif ($t < 31536000 && $y > 0) {//一年内 跨年
            $text = (12 - date("m", $time) + date("m", $ctime)) . "个月前";
        } else {
            $text = (date("Y", $ctime) - date("Y", $time)) . "年前";
        }

        return $text;
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22143.html

相关文章

  • js 显示友好的时间格式【刚刚、几秒前,几小时,几天前(3天内) 时间式化

    摘要:毫秒转换友好的显示格式输出格式小时分钟秒获取当前时间戳分钟秒小时分钟秒超过天秒毫秒转换友好的显示格式毫秒转换友好的显示格式输出格式小时前获取时间戳去掉时间戳后三位,与时间戳保持一致存储转换值十分钟内刚刚超过十分钟少于小时分钟前 /** * 毫秒转换友好的显示格式 * 输出格式:21小时28分钟15秒 * @param {[type]} time [description] *...

    RobinTang 评论0 收藏0
  • php 自带datetime类的使用

    摘要:有效周期标识符如下年月日周时分秒间隔约定中既可以有时间也可以有日期,如果有时间需要在日期和时间之间加上字母,例如,间隔约定表示间隔两天,间隔约定表示间隔两天五小时两分钟。 前言 以前更改时间格式的时候经常使用date方法,后来知道php竟然自带datetime类处理时间格式,记录一下用法,方便以后使用 实例化 在yii 1.1中,可以直接写成 $datetime = new DateT...

    andot 评论0 收藏0
  • 常见的javascript日期和时间互相转化

    摘要:写在前面前两天写了一篇常见的获取时间戳,今天来一篇续集吧,日期和时间戳的互转预备知识知道什么是时间戳即距离年月日时分秒的毫秒数如果你要用到的是秒,那也行,单位问题而已。同样的道理要会把时间戳转化成我们想要的日期格式。 写在前面 前两天写了一篇《常见的Javascript获取时间戳》,今天来一篇续集吧,日期和时间戳的互转 预备知识 知道什么是时间戳:即距离1970年01月01日00时0...

    morgan 评论0 收藏0
  • 国际化相对时间式化API:Intl.RelativeTimeFormat

    摘要:在不牺牲性能的情况下实现相对时间的本地化格式化。用法与示例以下示例展示了如何使用英语创建相对时间格式化程序。需要注意的是传递给构造函数的参数必须是一个语言标记,或者是一个包括多个语言标记的数组。 原文:The Intl.RelativeTimeFormat API 作者:Mathias Bynens(@mathias) 现代 Web 应用程序通常使用昨天,42秒前或3个月之类的短语,...

    Richard_Gao 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<