Использование углерода для возврата читаемой человеком разницы в датах и времени
Я использую Laravel 4 для создания своего проекта.
В настоящее время я создаю раздел комментариев и хочу показать, как давно был создан пост, примерно как в Facebook 10 минут назад' & '2 недели назад" и т.д.
Я провел небольшое исследование и обнаружил, что пакет под названием Углерод могу это сделать.
Прочитав документ Laravel, он говорит:
По умолчанию, красноречивый преобразует тот
created_at
,updated_at
, иdeleted_at
столбцы к экземплярамCarbon
, который предоставляет набор полезных методов и расширяет собственный PHPDateTime
класс.
Но когда я возвращаю созданный мной столбец даты, он не отображается, как на Facebook.
Код, который я использую, таков:
return array('time');
Использовал ли кто-нибудь этот углеродный пакет, который мог бы помочь мне сделать то, что мне нужно, я совершенно сбит с толку.
5 answers
Если вы читаете углеродные документы, чтобы получить то, что хотите, вы называете метод 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
. Множественное или единственное число, секунды, минуты, часы, дни, недели или годы, он запускается автоматически. Я протестировал его на Laravel версии 4.1.24.
Используйте этот код для времени назад:
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';
}
Для любой версии Laravel
$message->updated_at->diffForHumans();
Carbon::синтаксический анализ($p->created_at)->diffForHumans();