TypechoJoeTheme
Typecho实现分钟前、小时前,天前,月前等词义化时间
统计
登录
用户名
密码

Typecho实现分钟前、小时前,天前,月前等词义化时间

2021-01-07
/
0 评论
/
102 阅读
/
正在检测是否收录...
01/07

后台发布文章时,我总是看到有几分钟前,几小时前等词义化时间,于是我就像,后台文件中肯定有写好的代码。搜索了一下,被我找到了。

1、打开 var/Typecho/I18n.php 文件

找到文件中 词义化时间 这个注释,你会发现里面确实已经写好了。但是我发现官方提供的代码没有“周”和“月”,于是我模仿了前面的代码,添加了“周”和“月”。

2、在注释 如果是一个星期 的后面添加如下代码

/** 如果是一个星期以上 */
if ($between > 0 && $between < 2592000){
    $week = floor($between / 648000);
    return str_replace('%d', $week, _n('1周前', '%d周前', $week));
}
/** 如果是一年以内 */
if ($between > 0 && $between < 31557600){
    $month = floor($between / 2629800);
    return str_replace('%d', $month, _n('1个月前', '%d个月前', $month));
}

3、在需要调用时间的地方调用即可

<?php $this->dateWord(); ?>

完整的代码如下:

/**
* 词义化时间
*
* @access public
* @param string $from 起始时间
* @param string $now 终止时间
* @return string
*/
public static function dateWord($from, $now)
{
$between = $now - $from;

/** 如果是一天 */
if ($between >= 0 && $between < 86400 && date('d', $from) == date('d', $now)) {
    /** 如果是一小时 */
    if ($between < 3600) {
        /** 如果是一分钟 */
        if ($between < 60) {
            if (0 == $between) {
                return _t('刚刚');
            } else {
                return str_replace('%d', $between, _n('1秒前', '%d秒前', $between));
            }
        }

        $min = floor($between / 60);
        return str_replace('%d', $min, _n('1分钟前', '%d分钟前', $min));
    }

    $hour = floor($between / 3600);
    return str_replace('%d', $hour, _n('1小时前', '%d小时前', $hour));
}

/** 如果是昨天 */
if ($between > 0 && $between < 172800 
&& (date('z', $from) + 1 == date('z', $now)                             // 在同一年的情况 
    || date('z', $from) + 1 == date('L') + 365 + date('z', $now))) {    // 跨年的情况
    return _t('昨天 %s', date('H:i', $from));
}

/** 如果是一个星期 */
if ($between > 0 && $between < 604800) {
    $day = floor($between / 86400);
    return str_replace('%d', $day, _n('1天前', '%d天前', $day));
}
/** 如果是一个星期以上 */
if ($between > 0 && $between < 2592000){
    $week = floor($between / 648000);
    return str_replace('%d', $week, _n('1周前', '%d周前', $week));
}
/** 如果是一年以内 */
if ($between > 0 && $between < 31557600){
    $month = floor($between / 2629800);
    return str_replace('%d', $month, _n('1个月前', '%d个月前', $month));
}
/** 如果是一年以上 */
if (date('Y', $from) == date('Y', $now)) {
    return date(_t('Y年n月j日 H:i'), $from);
}

return date(_t('Y年m月d日 H:i'), $from);
}
朗读
赞 · 1
版权属于:

小王先森

本文链接:

https://xwsir.cn/2703.html(转载时请注明本文出处及文章链接)

评论 (0)