在PHP Codeigniter中显示"time ago"而不是datetime

use*_*463 1 time codeigniter date timeago

我想显示一个像twitter和FB这样的时间格式(3小时前发布,2分钟前发布,等等......)

我试过这段代码没有成功:

function format_interval($timestamp, $granularity = 2) {
  $units = array('1 year|@count years' => 31536000, '1 week|@count weeks' => 604800, '1 day|@count days' => 86400, '1 hour|@count hours' => 3600, '1 min|@count min' => 60, '1 sec|@count sec' => 1);
  $output = '';
  foreach ($units as $key => $value) {
    $key = explode('|', $key);
    if ($timestamp >= $value) {
      $floor = floor($timestamp / $value);
      $output .= ($output ? ' ' : '') . ($floor == 1 ? $key[0] : str_replace('@count', $floor, $key[1]));
      $timestamp %= $value;
      $granularity--;
    }

    if ($granularity == 0) {
      break;
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用这个函数回调到另一个函数,如:$ this-> format_interval(); 并将其传递给我的视图

我目前的格式日期是:2012-07-26 09:31:pm并且已存储在我的数据库中

任何帮助将非常感谢!

Col*_*ock 9

日期辅助的 timespan()方法,只是做的是:

此功能的最常见用途是显示从过去的某个时间点到现在已经过了多长时间.

给定时间戳,它将显示此格式已经过了多长时间:

1年,10个月,2周,5天,10小时,16分钟

因此,在您的示例中,您需要做的就是将日期转换为时间戳并执行以下操作:

$post_date = '13436714242';
$now = time();

// will echo "2 hours ago" (at the time of this post)
echo timespan($post_date, $now) . ' ago';
Run Code Online (Sandbox Code Playgroud)