Php 将不正确的存储日期时间保存到JPB和队列上的数据库中
仅仅在将数据创建到数据库中之后,我就发现错误的数据时间是Php 将不正确的存储日期时间保存到JPB和队列上的数据库中,php,laravel,laravel-5.6,Php,Laravel,Laravel 5.6,仅仅在将数据创建到数据库中之后,我就发现错误的数据时间是在处创建的,而在处更新为phpMyAdmin 我在laravelconfig/app文件中设置了Asia/tehran,并且我的系统日期时间正确且更新,当我使用carbon记录now()时,我得到以下输出: Carbon @1532117471 {#1179 ▼ date: 2018-07-21 00:41:11.142496 Asia/Tehran (+04:30) } 这对于我的系统datetime是正确的,在数据库datetim
在处创建的,而在处更新为phpMyAdmin
我在laravelconfig/app
文件中设置了Asia/tehran
,并且我的系统日期时间正确且更新,当我使用carbon
记录now()
时,我得到以下输出:
Carbon @1532117471 {#1179 ▼
date: 2018-07-21 00:41:11.142496 Asia/Tehran (+04:30)
}
这对于我的系统datetime是正确的,在数据库datetime上创建的和更新的是:2018-07-20 19:58:26
使用LARAVEL作业队列时会出现此问题
此时的时钟是00:41:11
而不是19:58:26
,我如何解决此问题并解决此问题?您正在查看laravel的创建和更新。它们被用作基于larave的config/app
时区创建的时间戳。
你怎么能改变这个
备选案文1。转到config/app.php
并将时区更改为所需的时区
备选案文2。使用变量管理在处创建的模型
在您雄辩的模型上,您只需创建:
public function setCreatedAtAttribute($value) {
/*
$value is the value it is going to initially be stored
This date format is required due to mySql's timestamp restriction.
However, you can create a date with Carbon, and as long as you format into that
structure Y-d-m H:i:s it will do just fine
*/
$this->attributes['created_at'] = Date("Y-m-d H:i:s);
}
注意:为了触发此函数,需要使用Eloquent的Create,如中所示:
$data = ['some_field' => 'hi',
'some_ther_field' => 'hiSomeOtherField'];
SomeModel::create($data);
事实上,数据库中的日期时间指向0 GMT是正确的。这样做是为了灵活性,当您从db获得数据时,eloquent将根据您的时区调整该时间。尝试使用orm(雄辩)从数据库中获取数据,并转储记录,您将看到时间适应了应用程序的要求timezone@num8er你认为我错了,我用雄辩的工具获得了错误的日期时间。Avel将created_在
和updated_在
列创建为时间戳
字段,而不是日期时间。根据MySql,时间戳以UTC格式存储在数据库中@JPark这个问题发生在我使用laravel作业队列时。嗯,我不明白laravel为什么在运行队列时不使用配置,除非有什么东西在某处覆盖了时区值。如果最近更改了app.php
中的设置,可以尝试清除缓存php artisan config:clear
并重新启动队列php artisan queue:restart
,以查看是否有帮助。