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


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

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

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

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

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

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

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

return array('time');

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

Author: Emile Bergeron, 2013-06-23

5 answers

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

<?php echo \Carbon\Carbon::createFromTimeStamp(strtotime($comment->created_at))->diffForHumans() ?>
 68
Author: Altrim, 2013-06-23 11:47:41

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

$comment->created_at->diffForHumans();

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

 103
Author: Ifan Iqbal, 2014-05-22 09:11:00

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

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

}

 2
Author: fdyahk, 2016-04-04 13:12:16

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

$message->updated_at->diffForHumans();
 2
Author: Rahul Hirve, 2018-01-08 12:15:13

Carbon::синтаксический анализ($p->created_at)->diffForHumans();

 0
Author: Hari Pudyal, 2017-11-09 07:31:06