使用Carbon来返回人类可读的date时间差异

我正在使用Laravel 4创build我的项目。

我目前正在构build评论部分,我想显示这个post在多久之前创build,有点像Facebook的“ 10分钟前”“2周前”等。

我做了一些研究,发现一个名为的包可以做到这一点。

在阅读Laravel文档之后,它说:

默认情况下,Eloquent会将created_atupdated_atdeleted_at列转换为Carbon实例,它提供了各种有用的方法,并扩展了原生的PHP DateTime类。

但是当我返回一个我创build的date列时,它不会像在Facebook上那样显示它。

我使用的代码是:

 return array('time'); 

有没有人使用这个碳包,可以帮我做我所需要的东西,我很困惑。

如果您阅读Carbon文档以获得您想要的内容,请致电diffForHumans()方法。

 <?php echo \Carbon\Carbon::createFromTimeStamp(strtotime($comment->created_at))->diffForHumans() ?> 

默认情况下,Eloquent会将created_at,updated_at和deleted_at列转换为Carbon的实例。 所以,你的代码应该是这样的:

 $comment->created_at->diffForHumans(); 

这很酷。 它会产生像2 minutes ago1 day agostring。 Plurar或单数,秒,分,小时,天,星期或年,它会自动运行。 我已经在Laravel 4.1.24版上testing过了。

使用此代码的时间前:

 public function time_elapsed_string($datetime, $full = false) { $now = new DateTime; $ago = new DateTime($datetime); $diff = $now->diff($ago); $diff->w = floor($diff->d / 7); $diff->d -= $diff->w * 7; $string = array( 'y' => 'year', 'm' => 'month', 'w' => 'week', 'd' => 'day', 'h' => 'hour', 'i' => 'minute', 's' => 'second', ); foreach ($string as $k => &$v) { if ($diff->$k) { $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : ''); } else { unset($string[$k]); } } if (!$full) $string = array_slice($string, 0, 1); return $string ? implode(', ', $string) . ' ago' : 'just now'; 

}

碳::parsing($ P-> created_at) – > diffForHumans();