1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > php lumen timestamp Lumen 5.4 时区设置

php lumen timestamp Lumen 5.4 时区设置

时间:2021-08-13 18:07:04

相关推荐

php lumen timestamp Lumen 5.4 时区设置

在数据库迁移文件中,定义了$table->timestamps();, 但是发现字段created_at 和updated_at 的时间比北京时间(lumen的.env定义了时区)多了8个小时。

经排查:

对于lumen项目,除了定义APP_TIMEZONE=Asia/Shanghai 还需定义DB_TIMEZONE=+08:00。

参考文章:

/lumen-php-timezone-db-diff-wrong-time-solution/

原文:

早前发现在命令行查看 mysql 数据时,timestamp 字段(比如created_at和updated_at)总是比现实多出 8 个小时。然而由于前端一直没有察觉有问题,所以就以为只是我数据库的 timezone 设置有问题而已。

直到我创建了一个连接于同一数据库的 Laravel 工程,才发现问题的存在,mysql 中所有 timestamp 字段的原始时间(UTC)都比现实多出8小时,而调整 mysql 时区,也只是改变显示而已,数据在 insert 时已经铸成大错。

反复研究了很多,Laravel 并没有把timezone放到.env里设置,看了一遍config/app.php和config/database.php文件,确保时区均设置正确,然后在 Laravel 项目里修改的时间,timestamp 是准确的,没有多出 8 小时。

OK,到这里,问题基本找到了,我在 Lumen 中找到vendor/laravel/lumen-framework/config/database.php配置文件,里面有'timezone' => env('DB_TIMEZONE', '+00:00')这么一句。。。我知道了,Lumen 的 PHP 配置是+8的时区,而 DB 配置是 0 时区,所以保存时,Lumen会主动把时间加 8 小时再保存进数据库。

果然,我在.env文件中添加DB_TIMEZONE=+08:00,Lumen就再也不插入错误的时间了。

官方文档中提到了APP_TIMEZONE,然而并没有提及DB_TIMEZONE,这个坑真的有点大。。。

其他参考连接:

/article/355

/blog/post/lumen-set-custom-timezone

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。