2013-06-23 5 views
35

Я использую Laravel 4 для создания моего проекта.Использование углерода, чтобы вернуть человекообразную разницу в времени и времени

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

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

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

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

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

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

return array('time'); 

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

ответ

55

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

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

О Данг .. спасибо за это ... плохо проверить это сейчас – BigJobbies

+0

Это работало идеально .. Спасибо – BigJobbies

+47

Это на самом деле гораздо проще, так как цитируемый бит из документации Laravel в в вопросе объясняется; '$ comment-> created_at' по умолчанию является объектом Carbon, поэтому все, что вам нужно сделать, это: $ bookmark-> created_at-> diffForHumans()' –

95

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

$comment->created_at->diffForHumans(); 

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

+0

Можно получить левое время? –

+0

«Углерод» [документация] (https://github.com/briannesbitt/Carbon) говорит «... но также делает« отныне »,« после »и« до ». –

+0

Отличный ответ - спасибо. – Banago

1

использовать этот код давно:

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

}

0

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

+0

Упоминайте, почему это правильный ответ? – mrun

0

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

$message->updated_at->diffForHumans();