Table des matières

Carbon

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()
    {
        //
    }
}

Exemple

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/

Bug

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);
}