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()を使用してホームページにアラートを表示できますか?
あなたはほとんどそこにいた。
protected $dates = ['license_expire']
を削除
LicenseExpire
アクセサーを次のように変更します。
public function getLicenseExpireAttribute($date)
{
return Carbon::parse($date);
}
この方法では、何があってもCarbon
インスタンスを返します。したがって、フォームには$employee->license_expire->format('Y-m-d')
(または必要な形式)があり、diffForHumans()
はホームページでも機能するはずです。
お役に立てれば!
以下を使用してみてください:
$dateTimeString = $aDateString." ".$aTimeString;
$dueDateTime = Carbon::createFromFormat('Y-m-d H:i:s', $dateTimeString, 'Europe/London');