Laravel 属性转换日期时间

问题描述 投票:0回答:2

在数据库中,在created_at字段中我有值“2020-10-04 20:46:14”。在模型“Entry”中我有这个代码

protected $casts = [
    'created_at' => 'datetime:d.m.Y H:i',
];

在前面的应用程序中,我得到值“04.10.2020 18:46”。在 config/app.php 中,我有时区配置 'timezone' => 'Europe/Berlin'。

有人知道问题出在哪里吗?为什么演员要改变时间?

laravel casting
2个回答
0
投票

每当您在响应中使用

Carbon
对象时,都会调用其
toJson()
方法。问题是,此方法始终显示
UTC
时区的时间。换句话说,当柏林是 20:46 时,按照 UTC 时间(例如伦敦),它就是 18:46。

我同意这种行为令人困惑。

要修复此问题,请指定您的自定义格式或使用您的模型作为响应,以利用

$casts
中的格式。快速解决方法是:

// your controller method

return [
   'foo' => $entry->created_at->toDateTimeString(),
];

你可以看看这个问题: Laravel Carbon 返回错误的时间


0
投票

您的投射日期格式看起来有误。它应该与数据库中存储的日期时间格式匹配:

protected $casts = [
    'created_at' => 'datetime:Y-m-d H:i:s',
];

显示日期时应采用不同的格式

{{ $model->created_at->format('d.m.Y H:i') }}
但是演员阵容应该符合原始格式。

© www.soinside.com 2019 - 2024. All rights reserved.