php - español - Uso de carbono para devolver una diferencia de fecha y hora legible para humanos
obtener fecha actual laravel carbon (5)
Estoy usando Laravel 4 para crear mi proyecto.
Actualmente estoy creando la sección de comentarios y quiero mostrar cuánto tiempo hace que se creó la publicación, algo así como "hace 10 minutos" y "hace 2 semanas" de Facebook, etc.
Hice un poco de investigación y descubrí que un paquete llamado Carbon puede hacer esto.
Después de leer los documentos de Laravel, dice:
Por defecto, Eloquent convertirá las
created_at
,updated_at
ydeleted_at
en instancias deCarbon
, que proporciona una variedad de métodos útiles, y amplía la clase PHPDateTime
nativa.
Pero cuando devuelvo una columna de fecha que he creado, no se muestra como en Facebook.
El código que estoy usando es:
return array(''time'');
¿Algún cuerpo usó este paquete de carbono que podría ayudarme a hacer lo que necesito? Estoy bastante confundido.
Carbon :: parse ($ p-> created_at) -> diffForHumans ();
De forma predeterminada, Eloquent convertirá las columnas created_at, updated_at y deleted_at en instancias de Carbon. Entonces, tu código debería ser así:
$comment->created_at->diffForHumans();
Es muy genial. Producirá una cadena como hace 2 minutes ago
o 1 day ago
. Plurar o singular, segundos, minutos, horas, días, semanas o años, se ejecuta automáticamente. Lo probé en Laravel versión 4.1.24.
Para cualquier versión de Laravel
$message->updated_at->diffForHumans();
Si lee los documentos de Carbon para obtener lo que desea, llame al método diffForHumans()
.
<?php echo /Carbon/Carbon::createFromTimeStamp(strtotime($comment->created_at))->diffForHumans() ?>
usa este código hace tiempo:
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'';
}