Laravel 8.54.0 中 ORM 查询created_at/updated_at 时区始终为UTC的问题?

Laravel 8.54.0 中 ORM 查询created_at/updated_at的结果在toArray()或者直接return响应后时区始终为UTC

我已经做了如下工作
1.app.php中timezone 已经修改为Asia/Shanghai
2.在model中定义了访问器

/**
 * @param $value
  * @return string
 * 创建时间-访问器
  */
protected function getCreatedAtAttribute($value)
{
  return Carbon::parse($value)->toDateTimeString();
}

/**
 * @param $value
  * @return string
 * 更新时间-访问器
  */
protected function getUpdatedAtAttribute($value)
{
  return Carbon::parse($value)->toDateTimeString();
}

3.修改了php.ini里timezone 为Asia/Shanghai

4.直接打印未toArray()之前的结果显示的是正确的时区时间

5.用DB直接查询获得的是正确的

所以想请教有没有大佬遇到这个问题,通过ORM查询created_at/updated_at toArray()或者直接return响应后时区始终为UTC

先拜谢!

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

模型中加入

use DateTimeInterface;
public function serializeDate(DateTimeInterface $date): string
    {
        return $date->format('Y-m-d H:i:s');
    }
}
2年前 评论
syskey (楼主) 2年前
luyang 2年前
讨论数量: 5

Carbon对象默认的时区就是UTC, 如果要换成UTC +8 需要携带时区参数。模型中created_at, updated_at字段本身就是一个Carbon对象(对象中有设置的时区),可以直接转换就好。

public function getCreatedAtAttribute($value)
{
    return $this->created_at->toDateTimeString();
}
2年前 评论
syskey (楼主) 2年前
zhanghongbean (作者) 2年前
陈先生

config/app.php timezone=>'Asia/Shanghai'

2年前 评论
syskey (楼主) 2年前
陈先生 (作者) 2年前
aab
2年前 评论
MArtian 2年前
syskey (楼主) 2年前

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

2年前 评论

模型中加入

use DateTimeInterface;
public function serializeDate(DateTimeInterface $date): string
    {
        return $date->format('Y-m-d H:i:s');
    }
}
2年前 评论
syskey (楼主) 2年前
luyang 2年前

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