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 列的优点是啥