web-dev-qa-db-fra.com

Utilisation de Carbon pour renvoyer une différence datetime lisible par l'homme

J'utilise Laravel 4 pour créer mon projet.

Je suis en train de construire la section commentaires et je veux afficher depuis combien de temps le message a été créé, un peu comme le 'il y a 10 mn'de Facebook _ & 'il y a 2 semaines' etc.

J'ai fait un peu de recherche et trouvé qu'un paquet appelé Carbon peut le faire. 

Après avoir lu le document de Laravel, il est écrit:

Par défaut, Eloquent convertira les created_at, updated_at et deleted_at colonnes aux instances de Carbon, qui fournit un assortiment de méthodes utiles et étend le PHP DateTime.__ natif. classe.

Mais lorsque je renvoie une colonne de date que j'ai créée, elle ne l'affiche pas comme sur Facebook.

Le code que j'utilise est:

return array('time');

Est-ce que n'importe quel corps a utilisé ce paquet Carbon qui pourrait me donner un coup de main pour faire ce dont j'ai besoin?.

42
BigJobbies

Si vous lisez les documents Carbon pour obtenir ce que vous voulez, vous appelez la méthode diffForHumans()

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

Par défaut, Eloquent convertira les colonnes created_at, updated_at et delete_at en instances de Carbon. Donc, votre code devrait ressembler à ceci:

$comment->created_at->diffForHumans();

C'est vraiment cool. Il va produire une chaîne comme 2 minutes ago ou 1 day ago. Plurar ou singulier, secondes, minutes, heures, jours, semaines ou années, il s'exécute automatiquement. Je l'ai testé sur Laravel version 4.1.24.

108
Ifan Iqbal

Pour toute version de Laravel

$message->updated_at->diffForHumans();
3
Rahul Hirve

utilisez ce code pour time ago:

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
fdyahk

Carbon :: parse ($ p-> created_at) -> diffForHumans ();

0
Hari Pudyal