使用Carbon来返回人类可读的date时间差异
我正在使用Laravel 4创build我的项目。
我目前正在构build评论部分,我想显示这个post在多久之前创build,有点像Facebook的“ 10分钟前”和“2周前”等。
我做了一些研究,发现一个名为碳的包可以做到这一点。
在阅读Laravel文档之后,它说:
默认情况下,Eloquent会将
created_at
,updated_at
和deleted_at
列转换为Carbon
实例,它提供了各种有用的方法,并扩展了原生的PHPDateTime
类。
但是当我返回一个我创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 ago
或1 day ago
string。 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();