个人学习、工作的经验整理!

dedebiz发布时间显示为今天昨天前天的方法

网站建设 来源:未知 作者:admin

dedebiz的文章发布时间调用格式一般分为一下这些:

[field:pubdate function="MyDate('Y-m-d',@me)"/]

2013-12-17

[field:pubdate function="MyDate('Y-m-d H:i',@me)"/]

2013-12-17 16:10

[field:pubdate function=MyDate('m-d',@me)/]

12-17

[field:pubdate function=MyDate('y-m-d',@me)/]

13-12-17

[field:pubdate function='strftime("%y-%m-%d %H:%M:%S",@me)'/]

13-12-17 10:35:21

[field:pubdate function='strftime("%m-%d %H:%M:%S",@me)'/]

12-17 10:35:21

[field:pubdate function='strftime("%y年%m月%d日",@me)'/]

13年12月17日

[field:pubdate function='strftime("%Y年%m月%d日 %H点%M分%S秒",@me)'/]

13年12月17日 12点12分30秒

有的时候,我们想做到不直接显示具体时间,而是以几天前、几月前这样的时间间隔方式来显示, 更利于让访客直观地看到文章的发布时段,以上的调用方法则不适用了。

教大家如何实现显示发布时间为多少时间前,主要有两种方法。

一、模板直接写PHP语句

[field:pubdate runphp='yes']

$today = Floor(time()/(3600 * 24));

$senday= Floor(@me/(3600 * 24));

$updays = $today-$senday;

if($updays >= 30 && $updays < 60) @me="1个月前";

elseif($updays >= 60 && $updays < 90) @me="2个月前";

elseif($updays >= 90 && $updays < 120) @me="3个月前";

elseif($updays >= 120 && $updays < 150) @me="4个月前";

elseif($updays >= 150 && $updays < 180) @me="5个月前";

elseif($updays >= 180 && $updays < 210) @me="6个月前";

elseif($updays >= 210 && $updays < 240) @me="7个月前";

elseif($updays >= 240 && $updays < 270) @me="8个月前";

elseif($updays >= 270 && $updays < 300) @me="9个月前";

elseif($updays > 300 && $updays < 330) @me="10个月前";

elseif($updays > 330 && $updays < 360) @me="11个月前";

elseif($updays >= 360) @me="一年前";

elseif($updays==0) @me = "今日";

else @me = $updays."天前";

[/field:pubdate]

二、自定义函数

在system/extend.func.php文件中加入以下代码:

//文章发布多少时间前

function showTime($time) {
$today = Floor(time()/(3600 * 24));

$senday= Floor($time/(3600 * 24));

$updays = $today-$senday;

if($updays==0)

$str = '今天';

elseif ($updays >=1 && $updays < 31) {
$str = $updays.'天前 ';

}

elseif ($updays >= 31&& $updays < 365) {
$m = floor($updays / 31);

$str = $m.'月前 ';

}

elseif ($updays >= 31&& $updays < 365) {
$y = floor($updays / (31* 365));

$str = $y.'年前 ';

}

else {
$str = $rtime;

}

return $str;

}

如果要显示几分钟和几小时,则用下面这个

function showTime($time) {
    $rtime = date("m-d H:i",$time);
    $htime = date("H:i",$time);
    $etime = time() - $time;
    if ($etime < 1) return '刚刚';
    $interval = array (
        12 * 30 * 24 * 60 * 60  =>  ' 年 前',
        30 * 24 * 60 * 60       =>  ' 个 月 前',
        7 * 24 * 60 * 60        =>  ' 周 前',
        24 * 60 * 60            =>  ' 天 前',
        60 * 60                 =>  ' 小 时 前',
        60                      =>  ' 分 钟 前',
        1                       =>  ' 秒 前'
    );
    foreach ($interval as $secs => $str) {
        $d = $etime / $secs;
        if ($d >= 1) {
            $r = round($d);
            return $r . $str;
        }
    };
}

调用方法

列表页:[field:pubdate function="showTime(@me)" /]

内容页:{dede:field.pubdate function="showTime(@me)"/}

以上两种方法都可以实现调用,第一种方法是直接把php语法写入模版中,会显得文件比较冗余,建议使用第二种自定函数的方式,简单明了。


答案有错 or 我有答案