2015-09-13 16 views
16

Ich verwende Laravel 5.1Convert String Carbon

Vor wenigen Tagen habe ich protected $dates = ['license_expire'] in meinem Modell die Zeichenfolge Datum Carbon Instanzen zu konvertieren. In HTML erstellen der Standardwert in Form für das Datum Carbon\Carbon::now()->format('Y-m-d') war

Um Alarm in Homepage anzuzeigen verwendet i <p>Licence Expired: <b>{{ $employee->license_expire < Carbon\Carbon::now()?'License has expired':$employee->license_expire->diffForHumans() }}</b></p>

Bis dahin diffForHumans() Methode funktioniert gut.

Aber in diesem Fall war der Standardwert des Bearbeitungsformulars auch das heutige Datum, egal was in der Datenbank war (ich benutze ein Teilformular). Um es zu lösen, ändere ich den Standardwert in HTML war NULL. Und fügen Sie eine andere Methode in meinem Modell hinzu, um das aktuelle Datum in create form anzuzeigen.

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

Danach, wenn ich zur Homepage gehen habe ich ein FatalErrorException die sagt Call to a member function diffForHumans() on string

Als ich das Datum mit dd($employee->license_expire) überprüfen es STRING wieder werden.

Kann mir jemand sagen, wie kann ich die Zeichenfolge in dieser Situation zu Carbon konvertieren?

oder

Make my Form des Standarddatum als das heutige Datum erstellen, das Datum des Bearbeitungsformular aus Datenbank und ich kann diffForHumans() verwenden, Alarm in Startseite zu zeigen?

Antwort

26

Sie waren fast da.

entfernen protected $dates = ['license_expire']

und dann LicenseExpire Mutator ändern:

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

Auf diese Weise wird es egal, was eine Carbon Instanz zurück. Also für Ihr Formular hätten Sie einfach $employee->license_expire->format('Y-m-d') (oder welches Format auch immer benötigt wird) und diffForHumans() sollte auch auf Ihrer Homepage funktionieren.

Hoffe, das hilft!

+2

ja! es half. Ich habe genau das getan, was du gesagt hast. es funktioniert perfekt, wie ich es wünsche. – smartrahat

1

Versuchen Sie, diese

$date = Carbon::parse(date_format($youttimestring,'d/m/Y H:i:s')); 
echo $date; 
0

Warum mit dem folgenden nicht versuchen:

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