$ model-> get上带有雄辩模型时间戳记的时区错误,但使用print_r纠正

问题描述

对于任何使用Laravel 7的雄辩模型,我都感到有些奇怪!

P.S .:我已经进行了所有测试:

PHP artisan optimize:clear

我不知道我在这里想念什么!

我不会发布任何代码,因为这是带有模型绑定的简单CRUD。

保存created_at和updated_at字段时,它会与我的timezome“ America / Sao_Paulo”正确保存在MysqL中。

但是,如果我在任何控件中执行此操作:

return $model->get()

return $model->paginate()

Model::all()

我得到答复:

{
    "data": [ 
        {
            ... other fields
            "created_at": "2020-08-23T15:22:41.000000Z","updated_at": "2020-08-23T15:22:41.000000Z"
        }
    ]
}

它返回的错误时间为+1小时。

但是,在这里事情变得很奇怪...如果我用print_r()中的任何一个,我都会得到正确的时间!

Array
        (
            ... other fields 
            [created_at] => 2020-08-23 12:22:41
            [updated_at] => 2020-08-23 12:22:41
        )

我尝试使用:

public function getDateFormat()
{
    return 'Y-m-d H:i:s';
}

但没有效果

预先感谢!

解决方法

在具有 UTC的口才模型上使用 toArray toJson 方法时,

Laravel 7 使用新的日期序列化格式

Laravel 7 之前,日期将被序列化为以下格式:

2019-12-02 20:01:00

使用 ISO-8601 格式序列化的日期将显示为:

2019-12-02T20:01:00.283041Z

请注意, ISO-8601 日期始终以 UTC 表示。

如果您想继续使用以前的行为,则可以在模型上覆盖serializeDate()方法:

use DateTimeInterface;

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

请参阅官方升级文档here

,

如果您已在config / app.php中更改了时区配置,但是使用其他时区格式将日期保存在数据库中,则将时区保留为UTC,以便laravel在从模型类中调用时不会将其更改为其他格式,或者您也可以通过将其以UTC格式保存在数据库中,然后将配置更改为您的应用所需的时区来实现相反的目的。

// config/app.php

'timezone' => 'UTC',