Преобразование строки в углерод
Я использую 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.
Может ли кто-нибудь сказать мне, как я могу преобразовать строку в Carbon в этой ситуации?
или
Сделайте мою дату для формы формы как сегодняшнюю дату, дату изменения формы из базы данных, и я могу использовать diffForHumans(), чтобы отображать предупреждение на главной странице?
Ответы
Ответ 1
Ты был почти там.
Удалите protected $dates = ['license_expire']
а затем измените мутатор LicenseExpire
на:
public function getLicenseExpireAttribute($date)
{
return Carbon::parse($date);
}
Таким образом, он вернет экземпляр Carbon
независимо от того, что.
Таким образом, для вашей формы вы просто должны иметь $employee->license_expire->format('Y-m-d')
(или любой формат), а diffForHumans()
также должен работать на вашей домашней странице.
Надеюсь, это поможет!
Ответ 2
Попробуйте это
$date = Carbon::parse(date_format($youttimestring,'d/m/Y H:i:s'));
echo $date;