Преобразовать строку в углерод


Я использую Laravel 5.1

Несколько дней назад я использовал protected $dates = ['license_expire'] в своей модели для преобразования даты строки в экземпляры углерода. В 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 был равен нулю. И добавьте еще один метод в мою модель, чтобы отобразить текущую дату в форме создания.

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), она снова становится СТРОКОЙ.

Может ли кто-нибудь сказать мне, как я могу преобразовать строку в углерод в этой ситуации?

Или

Сделайте дату моей формы создания по умолчанию сегодняшней датой, датой редактирования формы из базы данных, и я могу использовать diffForHumans() для отображения оповещения в домашних условиях страница?

Author: smartrahat, 2015-09-13

3 answers

Ты был почти на месте.

Удалить protected $dates = ['license_expire']

А затем измените свой LicenseExpire мутатор на:

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

Таким образом, он вернет экземпляр Carbon, несмотря ни на что. Таким образом, для вашей формы у вас будет просто $employee->license_expire->format('Y-m-d') (или любой другой требуемый формат), и diffForHumans() также должно работать на вашей домашней странице.

Надеюсь, это поможет!

 35
Author: Ross Wilson, 2017-08-18 17:11:39

Почему бы не попробовать использовать следующее:

$dateTimeString = $aDateString." ".$aTimeString;
$dueDateTime = Carbon::createFromFormat('Y-m-d H:i:s', $dateTimeString, 'Europe/London');   
 2
Author: mgilberties, 2018-03-05 16:53:52

Попробуйте это

$date = Carbon::parse(date_format($youttimestring,'d/m/Y H:i:s'));
echo $date;
 0
Author: li bing zhao, 2017-05-25 17:30:09