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

先拜谢!

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

模型中加入

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

模型中加入

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

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年前

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

2年前 评论

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