Подтвердить что ты не робот

Использование Carbon для возвращения читаемой человеком разницы в датах

Я использую Laravel 4 для создания своего проекта.

В настоящее время я создаю раздел комментариев и хочу показать, как давно был создан пост, например, Facebook "10 минут назад" & "2 недели назад" и т.д.

Я провел небольшое исследование и обнаружил, что пакет под названием Carbon может сделать это.

Прочитав документацию по Laravel, он говорит:

По умолчанию Eloquent преобразует created_at, updated_at и deleted_at столбцы для экземпляров Carbon, который обеспечивает ассортимент полезных методов и расширяет родной PHP DateTime класс.

Но когда я возвращаю созданный мной столбец даты, он не отображается так, как на Facebook.

Код, который я использую:

return array('time');

Кто-нибудь использовал этот пакет Carbon, который мог бы помочь мне сделать то, что мне нужно, я совершенно сбит с толку.

4b9b3361

Ответ 1

Если вы читаете документы Carbon, чтобы получить то, что вы хотите, вы вызываете метод diffForHumans().

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

Ответ 2

По умолчанию Eloquent преобразует столбцы created_at, updated_at и deleted_at в экземпляры Carbon. Итак, ваш код должен быть таким:

$comment->created_at->diffForHumans();

Это очень здорово. Он будет создавать строку типа 2 minutes ago или 1 day ago. Plurar или единственное число, секунды, минуты, часы, дни, недели или годы, он запускается автоматически. Я тестировал его на Laravel версии 4.1.24.

Ответ 3

Для любой версии Laravel

$message->updated_at->diffForHumans();

Ответ 4

использовать этот код за последнее время:

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';

}

Ответ 5

Carbon::parse($p->created_at)->diffForHumans();