web-dev-qa-db-fra.com

Convertir une chaîne en carbone

J'utilise Laravel 5.1

Il y a quelques jours, j'ai utilisé protected $dates = ['license_expire'] dans mon modèle pour convertir la date de chaîne en instances Carbon. En HTML, la valeur par défaut dans le formulaire de création pour la date était Carbon\Carbon::now()->format('Y-m-d')

Pour afficher l'alerte sur la page d'accueil, j'ai utilisé <p>Licence Expired: <b>{{ $employee->license_expire < Carbon\Carbon::now()?'License has expired':$employee->license_expire->diffForHumans() }}</b></p>

Jusque-là, la méthode diffForHumans () fonctionne bien.

Mais dans ce cas, la valeur par défaut du formulaire d'édition était également la date du jour, peu importe le contenu de la base de données (j'utilise un formulaire partiel). Pour le résoudre, je change la valeur par défaut en HTML: NUll. Et ajoutez une autre méthode dans mon modèle pour afficher la date du jour sous forme de création.

public function getLicenseExpireAttribute($date)
{
    return Carbon::parse($date)->format('Y-m-d');
}

Après cela, quand je vais à la page d'accueil, j'ai une FatalErrorException qui dit Call to a member function diffForHumans() on string

Lorsque je vérifie la date avec dd($employee->license_expire), il redevient STRING.

Quelqu'un peut-il me dire comment puis-je convertir la chaîne en carbone dans cette situation?

ou

Définir la date par défaut de mon formulaire de création comme date du jour, la date du formulaire de modification à partir de la base de données et puis-je utiliser diffForHumans () pour afficher une alerte dans la page d'accueil?

25
smartrahat

Vous étiez presque là.

Supprimer protected $dates = ['license_expire']

puis changez votre accesseur LicenseExpire en:

public function getLicenseExpireAttribute($date)
{
    return Carbon::parse($date);
}

De cette façon, il renverra une instance Carbon peu importe ce que . Ainsi, pour votre formulaire, vous auriez simplement $employee->license_expire->format('Y-m-d') (ou le format requis, de la sorte) et diffForHumans() devrait également fonctionner sur votre page d'accueil.

J'espère que cela t'aides!

49
Ross Wilson

Pourquoi ne pas essayer d'utiliser ce qui suit:

$dateTimeString = $aDateString." ".$aTimeString;
$dueDateTime = Carbon::createFromFormat('Y-m-d H:i:s', $dateTimeString, 'Europe/London');   
4
mgilberties