解决Laravel7.* 模型返回时间格式及时区不正确

开发新项目的时候用了Laravel 7.* 版本,记录下此版本中对日期序列化的变化.

首先,配置了框架中的时区[‘timezone’ => ‘PRC’],数据库中存储的时间戳也正确。但是当使用 Model 查询时,返回的时间仍然为 UTC 时间(世界协调时间);

尝试了使用:

protected $casts = [
        'created_at' => 'datetime:Y-m-d H:i:s',
        'updated_at' => 'datetime:Y-m-d H:i:s'
];

此时时间确实被格式化了,但是返回的还是UTC时间。

查看文档发现:

Laravel7.*对日期序列化做出了改变:

Laravel 7 在 Eloquent 模型类中调用 toArraytoJson 方法时,使用了一个新的日期序列化格式。框架现在使用
CarbontoJson 方法为格式化日期,该方法会生成一个兼容 ISO-8601
的、包含时区信息和小数秒的日期格式。此外,这个调整可以为客户端日期解析库提供更好地支持与集成。

在此之前,日期会被序列化为形如 2019-12-02 20:01:00
这种格式,而现在序列化之后的日期格式是这样的:2019-12-02T20:01:00.283041Z

如果你想要保持之前的日期格式方式,可以在模型类中重写 serializeDate 方法:

/**
 * Prepare a date for array / JSON serialization.
 *
 * @param  \DateTimeInterface  $date
 * @return string
 */
protected function serializeDate(DateTimeInterface $date)
{
     
    return $date->format('Y-m-d H:i:s');
}

你可能感兴趣的:(记录点滴,laravel)