Laravel7 Model 返回时间格式及时区不正确

环境Laravel7+PHP7.3.8
php.ini时区正确(Asia/Shanghai)、Laravel时区也正确(RPC)、数据库中存储的时间戳正确。
当使用Model查询时,返回的时间为UTC时间

$member = Member::firstOrCreate($where, $data);
return \Response::json($member);
{
    "msg": "",
    "data": {
        "edittime": "2020-03-30T02:37:31.000000Z",
        "regtime": "2020-03-30T02:37:31.000000Z",
    },
    "code": 1
}

使用tinker交互返回的正确时间(正确情况应该如下)

(base) ➜  dlf  ✗ php artisan tinker     
Psy Shell v0.10.2 (PHP 7.3.8 — cli) by Justin Hileman
>>> Carbon\Carbon::now();
=> Carbon\Carbon @1585536738 {#3083
     date: 2020-03-30 10:52:18.609379 Asia/Shanghai (+08:00),
     timezone_type: 3,
     timezone: "Asia/Shanghai",
   }
>>> echo date('Y-m-d H:i:s', time());
2020-03-30 10:52:21>>> 

返回的时区不对,目前可以用修改器解决,但是感觉不很繁琐,修改器意味着只要返回时间都要加修改器。

Laravel7时间格式为ISO-8601,

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案

在你的模型文件中指定格式

protected $casts = [
        'edittime' => 'datetime:Y-m-d H:i:s',
        'regtime' => 'datetime:Y-m-d H:i:s'
];
3个月前 评论
MyPuppet (楼主) 3个月前
家猪配种专家 (作者) 3个月前
MyPuppet (楼主) 3个月前
家猪配种专家 (作者) 3个月前
MyPuppet (楼主) 3个月前
MyPuppet (楼主) 3个月前
家猪配种专家 (作者) 3个月前
MyPuppet (楼主) 3个月前
讨论数量: 8

laravel 7 有个不兼容的改动,按照文档调整代码就行了

升级说明《Laravel 7 中文文档》

3个月前 评论
zozero 1个月前

在你的模型文件中指定格式

protected $casts = [
        'edittime' => 'datetime:Y-m-d H:i:s',
        'regtime' => 'datetime:Y-m-d H:i:s'
];
3个月前 评论
MyPuppet (楼主) 3个月前
家猪配种专家 (作者) 3个月前
MyPuppet (楼主) 3个月前
家猪配种专家 (作者) 3个月前
MyPuppet (楼主) 3个月前
MyPuppet (楼主) 3个月前
家猪配种专家 (作者) 3个月前
MyPuppet (楼主) 3个月前

怀疑改错配置

3个月前 评论
MyPuppet (楼主) 3个月前
Hanson (作者) 3个月前
MyPuppet (楼主) 3个月前
pigzzz 3个月前
Hanson (作者) 3个月前
pigzzz 3个月前
Hanson (作者) 3个月前
MyPuppet (楼主) 3个月前

这不是格式问题吗?关时区什么事?

3个月前 评论
MyPuppet (楼主) 3个月前
DDDecade (作者) 3个月前
    /**
     * 为数组 / JSON 序列化准备日期。
     *
     * @param \DateTimeInterface $date
     * @return string
     */
    protected function serializeDate(DateTimeInterface $date)
    {
        return $date->format($this->dateFormat ?: 'Y-m-d H:i:s');
    }
3个月前 评论
protected function serializeDate(\DateTimeInterface $date)
{
    return Carbon::instance($date)->toDateTimeString();
}

把这个方法里面的方法换了

3个月前 评论

阅读 laravel7 升级说明 --- 日期序列化

2个月前 评论

我只是将 config/app.php 中,timezone 设置为 RPC 就可以。

2个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!