Laravel 7 - created_at 在数据表中显示错误的日期时间

Posted

技术标签:

【中文标题】Laravel 7 - created_at 在数据表中显示错误的日期时间【英文标题】:Laravel 7 - created_at shows wrong datetime in datatable 【发布时间】:2020-11-06 11:54:51 【问题描述】:

在数据库中,我已在 created_at 字段中存储日期以存储日志。问题是 数据库中的日期与数据表中显示的日期不同

这是来自数据库行的屏幕截图:

并导致显示的数据表:

对于波兰 +2H,数据库中的时区看起来是正确的:

此外,添加到数据库的每个新内容都显示正确的日期。 Laravel 中的时区设置为 Europe/Warsaw 是正确的。日期格式在日志模型中转换为首选格式:

class StorageLog extends Model

    protected $table = "storage_logs";
    public $timestamps = true;

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

这是调用数据库并返回数据的代码:

 $logs = StorageLog::select('id', 'id_storage_product', 'id_user', 'log', 'created_at')
 $result = $logs->orderBy('id', 'DESC')->paginate(20, ['*'], 'page', 1);

使用 DD 函数的结果:

非常感谢您对问题的任何帮助。 祝你有美好的一天!

【问题讨论】:

可能,Carbon 将时间戳更新为 UTC,并将集合作为您在配置中设置的时区。 mysql 日期时间设置错误? 【参考方案1】:

转到config/app.php 并检查您的时区:

/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/

'timezone' => 'Europe/Berlin',

默认时区设置为 UTC,如果你想用 Laravel 存储正确的时间,你需要设置正确的时区。

还有一件事......那段时间将从运行 Laravel 的操作系统中获取。所以首先正确设置,然后在 Laravel 中。

【讨论】:

时区在 laravel 配置中设置正确,我也在 php date()、laravel tinker、Linux 服务器中检查过 - 一切都显示正确的时间和时区。 某些东西正在影响“created_at”字段 - 我已经为查询添加了别名,它正确地显示了日期时间。奇怪但问题解决了。感谢您的帮助。 @Marek 这里的别名是什么,你能澄清一下吗?

以上是关于Laravel 7 - created_at 在数据表中显示错误的日期时间的主要内容,如果未能解决你的问题,请参考以下文章

Laravel / Moment - 如何确定夏令时期间是不是 created_at?

如何在 Laravel 中更新 created_at 的列属性

created_at 列中的时间不正确 - Laravel 5.4

Laravel 中 created_at 和 updated_at 列的优点是啥

如何在 laravel 5.4 中仅获取 created_at 日期而不是时间

laravel - 从数据库中删除 updated_at 和 created_at 列后,laravel 尝试插入它们