Я использую Laravel 4 для создания своего проекта.
В настоящее время я создаю раздел комментариев, и хочу показать, как давно был создан пост, вроде как « 10 минут назад» Facebook и «2 недели назад» и т. Д.
Я провел немного исследований и обнаружил, что пакет под названием Carbon может это сделать.
После прочтения документа Laravel, он говорит:
По умолчанию Eloquent преобразует
created_at
,updated_at
иdeleted_at
в экземплярыCarbon
, который предоставляет множество полезных методов и расширяет собственный класс PHPDateTime
.
Но когда я возвращаю столбец даты, который я создал, он не отображает его, как на 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 ();