如何处理日期,尝试计算自发帖以来的时间

时间:2012-08-22 作者:dkmojo

我正在尝试创建一个“时间自”帖子显示,这样当有人查看帖子时,他们会看到“大约一周前发布”而不是日期。

我尝试了一些方法,但没有成功,我想这是因为我发现我的默认时区是GMT(使用date\\u default\\u timezone\\u get())和我的日期。时区(使用ini\\u get(\'date.timezone\')是美国/丹佛。我的实际时区是美国/纽约(或EDT)。

我需要找到当前登录用户的时区(不知道如何做到这一点-可能是在他们的个人资料中设置),然后显示帖子发布以来的时间。我确信我需要使用strotime从数据库(我相信都是UTC)获取时间戳,然后计算出当前登录用户的时区,并创建“time-since”消息。

我确实有一种计算发帖后时间的方法,但根据我发现的时区信息,它有错误的时间。

以下是我使用的代码:

public function time_since($stored_time){

$time_elapsed = time() - strtotime($stored_time);

$tokens = array (
    31536000 => \'year\',
    2592000 => \'month\',
    604800 => \'week\',
    86400 => \'day\',
    3600 => \'hour\',
    60 => \'minute\',
    1 => \'second\'
);

foreach ($tokens as $unit => $text) {
    if ($time_elapsed < $unit) continue;

    $numberOfUnits = floor($time_elapsed / $unit);

    return $numberOfUnits.\' \'.$text.(($numberOfUnits>1)?\'s\':\'\');
}

}//end time_since
如果有人能把我推向正确的方向,我将不胜感激。

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

您不需要知道用户的时区,因为帖子发布后的时间与时区无关。

WordPress将您的时区设置为UTC,以便在内部,所有日期都处理相同且一致的时区。您应该避免使用php函数,而是使用WordPress提供的函数。

顺便说一下,human_time_diff() 做你想做的事。。

要获取帖子发布后的时间。。。

//Unix timestamp of post
$gmt_timestamp = get_post_time( \'G\', true, $post );

//Echo time since timestamp in human readable form
printf( __( \'%s ago\' ), human_time_diff( $gmt_timestamp ) );
编辑human_time_diff() 不幸的是,只会持续几天。但这里也有一个估计周、月和年的方法(虽然显然不完全是因为一个月没有固定的天数)。这是未经测试的。

 wpse_human_time_diff($from, $to=\'\'){

      if ( empty($to) )
           $to = time();
      $diff = (int) abs($to - $from);

      if ( $diff <= 3600 ){
            $mins = round($diff / 60);
            if ($mins <= 1) {
                  $mins = 1;
            }

            /* translators: min=minute */
            $since = sprintf(_n(\'%s min\', \'%s mins\', $mins), $mins);

       }elseif( $diff <= 86400 ){
            $hours = round($diff / 3600);
            $since = sprintf(_n(\'%s hour\', \'%s hours\', $hours), $hours);

       }elseif( $diff <= 604800 ) {
            $days = round($diff / 86400);
            $since = sprintf(_n(\'%s day\', \'%s days\', $days), $days);

       }elseif( $diff <= 2592000 ){
            $weeks = round($diff / 604800);
            $since = sprintf(_n(\'%s week\', \'%s weeks\', $weeks), $weeks);

       }elseif( $diff <= 31536000 ){
            $months = round($diff / 2592000);
            $since = sprintf(_n(\'%s month\', \'%s months\', $months), $months);

       }else{
            $years = round($diff / 31536000)
            $since = sprintf(_n(\'%s year\', \'%s years\', $years), $years);
       }

       return $since;

}

结束

相关推荐

Duplicate posts

我目前正在一个杂志风格的网站上工作,在主页上,我有三个不同的部分来显示最新的新闻。滑块、最新新闻和更多新闻。问题是我不知道如何避免每个帖子上出现重复帖子。以下是查询示例:// build query query_posts( $this->getQueryParams($type, $esc_category, $this->escapeText($data[\'number_of_posts\'])) ); // loop while (have_posts()) :