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个小时

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案
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年前 评论