web-dev-qa-db-ja.com

文字列をカーボンに変換

Laravel 5.1を使用しています

数日前、モデルでprotected $dates = ['license_expire']を使用して、文字列の日付をCarbonインスタンスに変換しました。 HTMLでは、日付の作成フォームのデフォルト値はCarbon\Carbon::now()->format('Y-m-d')でした

ホームページにアラートを表示するために、<p>Licence Expired: <b>{{ $employee->license_expire < Carbon\Carbon::now()?'License has expired':$employee->license_expire->diffForHumans() }}</b></p>を使用しました

それまでdiffForHumans()メソッドは正常に動作します。

しかし、その場合、編集フォームのデフォルト値は、データベースに何があっても今日の日付でもあります(部分フォームを使用しています)。それを解決するために、HTMLのデフォルト値をNUllに変更しました。モデルに別のメソッドを追加して、現在の日付を作成フォームに表示します。

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

その後、ホームページにアクセスすると、FatalErrorExceptionというCall to a member function diffForHumans() on stringというメッセージが表示されます

dd($employee->license_expire)で日付を確認すると、再びSTRINGになります。

この状況で文字列をカーボンに変換するにはどうすればよいですか?

または

作成フォームのデフォルトの日付を今日の日付、データベースからの編集フォームの日付とし、diffForHumans()を使用してホームページにアラートを表示できますか?

32
smartrahat

あなたはほとんどそこにいた。

protected $dates = ['license_expire']を削除

LicenseExpireアクセサーを次のように変更します。

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

この方法では、何があってもCarbonインスタンスを返します。したがって、フォームには$employee->license_expire->format('Y-m-d')(または必要な形式)があり、diffForHumans()はホームページでも機能するはずです。

お役に立てれば!

62
Rwd

以下を使用してみてください:

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