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

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

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

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

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

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

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

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

 return array('time'); 

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

Если вы читаете документы 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 . Plurar или единственное число, секунды, минуты, часы, дни, недели или годы, он запускается автоматически. Я тестировал его на 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'; с 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'; 

}

Углерод :: синтаксического анализа ($ p-> created_at) -> diffForHumans ();