如何将日期更改为几天前(人类时间差异)

时间:2017-07-26 23:23:42

标签: php html wordpress function date

我正在使用WordPress主题报纸。现在,日期显示为" 2017年7月26日",但我希望它显示为" 4小时前",或者" 3天前"。环顾四周后,我发现有一个WordPress代码会执行此操作。但是,我无法弄清楚如何用人类时差来替换我网站的当前日期。有没有人有任何建议?

我的主题使用的获取日期函数:

    function get_date($show_stars_on_review = true) {
        $visibility_class = '';
        if (td_util::get_option('tds_m_show_date') == 'hide') {
            $visibility_class = ' td-visibility-hidden';
        }

        $buffy = '';
        if ($this->is_review and $show_stars_on_review === true) {
            //if review show stars
            $buffy .= '<div class="entry-review-stars">';
            $buffy .=  td_review::render_stars($this->td_review);
            $buffy .= '</div>';

        } else {
            if (td_util::get_option('tds_m_show_date') != 'hide') {
                $td_article_date_unix = get_the_time('U', $this->post->ID);
                $buffy .= '<span class="td-post-date">';
                    $buffy .= '<time class="entry-date updated td-module-date' . $visibility_class . '" datetime="' . date(DATE_W3C, $td_article_date_unix) . '" >' . get_the_time(get_option('date_format'), $this->post->ID) . '</time>';
                $buffy .= '</span>';
            }
        }

        return $buffy;
    }

调用函数的地方:

    <div class="item-details">
        <?php echo $this->get_title();?>
        <div class="td-module-meta-info">
            <?php if (td_util::get_option('tds_category_module_mx1') == 'yes') { echo $this->get_category(); }?>
            <span class="td-author-date">
                <?php echo $this->get_author();?>
                <?php echo $this->get_date();?>
            </span>
        </div>
        <div class="td-excerpt">
            <?php echo $this->get_excerpt();?>
        </div>
    </div>

人类时间差异代码:

<?php echo str_replace('mins', 'minutes', human_time_diff( get_the_time('U'), current_time('timestamp') ) . ' ago'); ?>

我想要更改日期的元素

&#13;
&#13;
<?php

class td_module_2 extends td_module {

    function __construct($post) {
        //run the parrent constructor
        parent::__construct($post);
    }

    function render() {
        ob_start();
        ?>

        <div class="<?php echo $this->get_module_classes();?>">
            <div class="td-module-image">
                <?php echo $this->get_image('td_324x160');?>
                <?php if (td_util::get_option('tds_category_module_2') == 'yes') { echo $this->get_category(); }?>
            </div>
            <?php echo $this->get_title();?>


            <div class="td-module-meta-info">
                <?php echo $this->get_author();?>
                <?php echo wp_relative_date(get_the_time('U'));?>
            </div>


            <div class="td-excerpt">
                <?php echo $this->get_excerpt();?>
            </div>

            <?php echo $this->get_quotes_on_blocks();?>

        </div>

        <?php return ob_get_clean();
    }
}
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

以下是根据设置的当前日期和时间转换为分钟,小时或天的一些代码,其中发布日期是您创建元素时的日期时间戳。

尝试看看这是否符合您的要求。

$ post_date 更改为创建帖子的时间戳。 (E.G在下面这个例子中根据我发布这个答案的时间显示1天......)

在函数中包含下面的代码,并使用带有时间戳('7/25/2017 00:00:00')的wordpress getDate功能传入$ post_date,该函数将返回小时,分钟,天。

$seconds_hours = 60*60;
$hours_days = $seconds_hours*24;

$today = date("Y-m-d");
$timestamp = $today.' '.date("H:i:s");

$post_date = '7/25/2017 00:00:00';

$difference = strtotime($timestamp)-strtotime($post_date);
if ($difference>$hours_days) {
    $date1 = new DateTime(substr($post_date,0,10));
    $date2 = new DateTime($today);
    $since = $date2->diff($date1)->format("%d");
    if ($since==1) { $since .= ' day'; }
    else { $since .= ' days'; }
} else if ($difference>$seconds_hours) {
    $since = floor($difference/$seconds_hours).' hours';
} else {
    $since = floor($difference/60).' mins';//mins
}

echo $since;

Wordpress解决方案(未经测试)

function human_difference($post_date) {
    $seconds_hours = 60*60;
    $hours_days = $seconds_hours*24;

    $today = date("Y-m-d");
    $timestamp = $today.' '.date("H:i:s");

    $difference = strtotime($timestamp)-strtotime($post_date);
    if ($difference>$hours_days) {
        $date1 = new DateTime(substr($post_date,0,10));
        $date2 = new DateTime($today);
        $since = $date2->diff($date1)->format("%d");
        if ($since==1) { $since .= ' day'; }
        else { $since .= ' days'; }
    } else if ($difference>$seconds_hours) {
        $since = floor($difference/$seconds_hours).' hours';
    } else {
        $since = floor($difference/60).' mins';//mins
    }

    return $since;
}

$post_date_time = get_the_date() . ' ' . get_the_time(); //Format this to m/d/Y H:i:s
echo human_difference($post_date_time); // x days or x hours or x minutes

答案 1 :(得分:0)

在functions.php文件中添加

function wp_relative_date($post_date)
{
    return human_time_diff( $post_date , current_time( 'timestamp' ) ) . ' ago';
}

显示时间在循环中添加

echo wp_relative_date(get_the_time('U'));