模型返回的时间和数据库中相差16小时

1. 运行环境

1). 当前使用的 Laravel 版本?

lumen 8.3.4

2). 当前使用的 php/php-fpm 版本?

PHP 版本:7.4.27
php-fpm 版本:7.4.27

3). 当前系统

Linux及windows10均出现该问题

2. 问题描述?

数据库是mysql5.7 字段用的是timestamp
模型用了自动时间

配置(.env)中设置了APP_TIMEZONE=PRC
写入一条数据,数据库中的数据和接口返回的数据相差16个小时,且与当前操作系统时间分别相差 -8 +8小时

如果把.env中时区改为UTC
则写入数据后数据库的时间与当前操作系统时间相同,但是接口返回时间差8小时(比当前时间早8小时)

3. 您期望得到的结果?

怎么样配置才能确保 接口(模型) 返回的时间及数据库查询到的时间一致,且和系统时间时间也一致

4. 您实际得到的结果?

当前系统实际时间(截图有2分钟时间差)
Laravel
数据库中数据的时间
Laravel
查询数据的接口返回
Laravel

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

DB_TIMEZONE=+08:00

4年前 评论
讨论数量: 5
数据库时区
laravel设置时区
服务器时区
当前时区
都看下
4年前 评论

数据库时区 file

lumen设置的时区 file

linux系统当前时区 file

PHP时区 file

4年前 评论

一般有8小时时差是正常的,因为存的是timesteamp类型,也就是时间戳,显示的时候,在模型中使用:

class Address extends Model
{
    use HasDateTimeFormatter;
    ...
}

显示的时候会根据系统的时区自动转化成当前时区的时间。

4年前 评论

谢谢@Smilephp , 加上了你说的DB_TIMEZONE=+08:00

file

再配合另一篇问答中提到的方法就能完美解决了: 在模型或者公共模型中加上

public function serializeDate(\DateTimeInterface $dateTime){
    return $dateTime->format('Y-m-d H:i:s');
}

file

file

file

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!