webentwicklung-frage-antwort-db.com.de

Konvertieren Sie String in Carbon

Ich benutze Laravel 5.1

Vor einigen Tagen habe ich in meinem Modell protected $dates = ['license_expire'] verwendet, um das String-Datum in Carbon-Instanzen zu konvertieren. In HTML war der Standardwert in create form für das Datum Carbon\Carbon::now()->format('Y-m-d').

Um Alarm auf der Startseite anzuzeigen, habe ich <p>Licence Expired: <b>{{ $employee->license_expire < Carbon\Carbon::now()?'License has expired':$employee->license_expire->diffForHumans() }}</b></p> verwendet.

Bis dahin funktioniert die diffForHumans () - Methode einwandfrei.

In diesem Fall war der Standardwert des Bearbeitungsformulars jedoch auch das heutige Datum, unabhängig davon, was sich in der Datenbank befand (ich verwende ein Teilformular). Um es aufzulösen, ändere ich den Standardwert in HTML NUll. Fügen Sie in meinem Modell eine weitere Methode hinzu, um das aktuelle Datum im Erstellungsformular anzuzeigen.

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

Danach, wenn ich zur Startseite gehe, habe ich eine FatalErrorException, die Call to a member function diffForHumans() on string sagt

Wenn ich das Datum mit dd($employee->license_expire) überprüfe, wird es wieder zu STRING.

Kann mir jemand sagen, wie ich die Saite in dieser Situation in Carbon umwandeln kann?

oder

Das Standarddatum meines Erstellungsformulars als heutiges Datum, das Datum des Bearbeitungsformulars aus der Datenbank festlegen und ich kann diffForHumans () verwenden, um eine Warnung auf der Startseite anzuzeigen.

25
smartrahat

Du warst fast da.

protected $dates = ['license_expire'] entfernen

und ändern Sie dann Ihren LicenseExpire-Zugriff in:

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

Auf diese Weise wird in jedem Fall eine Carbon-Instanz zurückgegeben. Für Ihr Formular hätten Sie einfach $employee->license_expire->format('Y-m-d') (oder welches Format auch immer erforderlich) und diffForHumans() sollte auch auf Ihrer Startseite funktionieren.

Hoffe das hilft!

49
Ross Wilson

Warum probieren Sie nicht folgendes aus:

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