68

我正在使用 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');
}

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

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

谁能告诉我在这种情况下如何将字符串转换为碳?

或者

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

4

4 回答 4

111

你快到了。

消除protected $dates = ['license_expire']

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

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

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

希望这可以帮助!

于 2015-09-14T07:40:17.860 回答
19

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

$dateTimeString = $aDateString." ".$aTimeString;
$dueDateTime = Carbon::createFromFormat('Y-m-d H:i:s', $dateTimeString, 'Europe/London');   
于 2018-03-05T16:53:52.070 回答
0

$filter['dateOfService']='06.2021';

$d1 = Carbon::createFromFormat('m.Y', $filter['dateOfService'], 'Europe/Warsaw')->format('m.Y');
于 2021-06-18T11:57:38.453 回答
-4

尝试这个

$date = Carbon::parse(date_format($youttimestring,'d/m/Y H:i:s'));
echo $date;
于 2017-05-25T17:30:09.197 回答