Docs ⇒ http://carbon.nesbot.com/docs/
Certain champ par défaut comme created_at, updated_at et deleted_at retourne une instance Carbon avec Eloquent
Si vous avez d’autres champs date dans votre table, il faut les rajouter dans son model
protected $dates = [ 'deadline', 'closed_at' ];
Ainsi dans une vue, vous pouvez facilement formater votre date
$issue->deadline->format('d/m/Y') $comment->created_at->diffForHumans()
Le diffForHumans() est intéressant :) mais il faudra le mettre en français par défaut.
Pour cela, j’ai modifié le fichier app\Providers\AppServiceProvider.php en considérant que votre app.locale=‘fr’ et votre app.timezone=‘Europe/Paris’
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Carbon\Carbon; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { Carbon::setLocale(config('app.locale')); } /** * Register any application services. * * @return void */ public function register() { // } }
Transformer des secondes en heure minute seconde
>>> \Carbon\Carbon::parse('0sec')->diff(\Carbon\Carbon::parse('490sec'))->format('%H:%I:%S') => "00:08:10"
Récupérer une date au format français dd/mm/yyyy pour l’intégrer dans un model
>>> \Carbon\Carbon::createFromFormat('d/m/Y','11/06/1990') => Carbon\Carbon {#688 +"date": "1990-06-11 16:52:04.000000", +"timezone_type": 3, +"timezone": "Europe/Paris", }
exemple dans un controller
$charge->date_debut = Carbon::createFromFormat('d/m/Y',$request->input('date_debut')); $charge->date_fin = Carbon::createFromFormat('d/m/Y',$request->input('date_fin'));
Plein d’autre exemple dans la docs ⇒ http://carbon.nesbot.com/docs/
Un gros bug de calcul entre les mois ⇒ https://github.com/briannesbitt/Carbon/issues/344
Pour calculer le nombre de mois entre 2 dates il va falloir utiliser une fonction annexe …
function diffInMonths(\DateTime $date1, \DateTime $date2) { $diff = $date1->diff($date2); $months = $diff->y * 12 + $diff->m + $diff->d / 30; return (int) round($months); }