laravel10项目中toArray方法会将created_at字段减少8个小时

1. 运行环境

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

laravel10

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

PHP 版本:8。1

php-fpm 版本:8.1

2. 问题描述?

var_dump(Campaign::query()->orderByDesc('id')->first()->toArray()['created_at']);                dd(Campaign::query()->orderByDesc('id')->first()->created_at->format('Y-m-d H:i:s'));

查询出来的时间不一致,下面的方法是正确的时间,上面toArray之后时间少了8个小时

laravel10项目中toArray方法会将created_at字段减少8个小时

app.php中已设置’timezone’ => ‘Asia/Shanghai’,
容器时间也是正确的

laravel10项目中toArray方法会将created_at字段减少8个小时

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

时区设置成 国内的!

1年前 评论
huxiuhang (楼主) 1年前

容器的时间呢

1年前 评论
huxiuhang (楼主) 1年前

toArray 出来的不是你数据库中存储的时间吗?

format 的是东八区的时间 也就是+8小时的时间,看起来没什么问题。

1年前 评论

不使用casts,使用serializeDate,即可解决该问题

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

    protected $casts = [
//        'created_at' => 'datetime:Y-m-d H:i:s',
//        'updated_at' => 'datetime:Y-m-d H:i:s',
    ];
1年前 评论
徵羽宫 1年前
1年前 评论
huxiuhang (楼主) 1年前

app.php 设置一下这个 'timezone' => 'PRC'

1年前 评论

模型里面的$casts 是不是设置了 created_at = datetime

1年前 评论

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