将字符串转换为碳

sma*_*hat 35 php date php-carbon laravel-5.1

我正在使用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');
}
Run Code Online (Sandbox Code Playgroud)

在那之后,当我去主页时,我有一个FatalErrorExceptionCall to a member function diffForHumans() on string

当我检查日期时,dd($employee->license_expire)它再次成为STRING.

任何人都可以告诉我如何在这种情况下将字符串转换为Carbon?

要么

将我的创建表单的默认日期设置为今天的日期,编辑表单的日期来自数据库,我可以使用diffForHumans()在主页中显示警报?

Rwd*_*Rwd 66

你快到了.

去掉 protected $dates = ['license_expire']

然后将您的LicenseExpire访问者更改为:

public function getLicenseExpireAttribute($date)
{
    return Carbon::parse($date);
}
Run Code Online (Sandbox Code Playgroud)

这样它无论如何都会返回一个Carbon实例.因此,对于您的表单,您将拥有$employee->license_expire->format('Y-m-d')(或任何需要的格式),并且也diffForHumans()应该在您的主页上工作.

希望这可以帮助!

  • 是!它有所帮助.我完全按照你说的做了.它按照我的愿望完美运作. (3认同)

mgi*_*ies 11

为什么不尝试使用以下内容:

$dateTimeString = $aDateString." ".$aTimeString;
$dueDateTime = Carbon::createFromFormat('Y-m-d H:i:s', $dateTimeString, 'Europe/London');   
Run Code Online (Sandbox Code Playgroud)