将字符串转换为碳

新手上路,请多包涵

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

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

或者

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

原文由 smartrahat 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 552
2 个回答

你快到了。

删除 protected $dates = ['license_expire']

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

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

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


如果你使用 Laravel 9+,你也可以使用更新的语法来定义 Accessors

 use Illuminate\Database\Eloquent\Casts\Attribute;

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

原文由 Rwd 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

原文由 macieks 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题