转换字符串到碳

我正在使用 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>

在此之前,似乎似乎似乎没有什么问题。

但在这种情况下,无论数据库中有什么,编辑表单的默认值也是今天的日期(我使用的是部分表单)。为了解决这个问题,我将 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)检查日期时,它又变成了字符串。

有人能告诉我在这种情况下怎样才能把弦转换成碳吗?

或者

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

173351 次浏览

你差点就成功了。

移除 protected $dates = ['license_expire']

然后将 LicenseExpire访问器更改为:

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

这样无论如何它都会返回一个 Carbon实例。 所以对于你的表单,你只需要 $employee->license_expire->format('Y-m-d')(或者任何需要的格式)和 diffForHumans()就可以在你的主页上工作了。


如果您正在使用 Laravel9 + ,您可以选择使用更新后的语法来定义 访问者:

use Illuminate\Database\Eloquent\Casts\Attribute;


public function licenseExpire(): Attribute
{
return Attribute::make(
get: fn ($value) => Carbon::parse($value);
);
}

试试这个

$date = Carbon::parse(date_format($youttimestring,'d/m/Y H:i:s'));
echo $date;

为什么不尝试使用以下方法:

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

$filter [‘ dateOfService’] =’06.2021’;

$d1 = Carbon::createFromFormat('m.Y', $filter['dateOfService'], 'Europe/Warsaw')->format('m.Y');