laravel8查询出来少8个小时

  1. config/app.php 设置了 'timezone' => 'PRC',
  2. 数据库字段类型 timestamp

查询出来还是少8个小时,目前找到这个方法解决,每个model都要设置,有什么好的办法统一设置?

#model
use DateTimeInterface;
protected function serializeDate(DateTimeInterface $date){
    return $date->format('Y-m-d H:i:s');
}
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

创建一个基类就好了呀,所有的model都继承那个基类,基类里边改时间格式就行了,如果你说model是命令创建的,那你可以把model的存根文件发布出来,修改一下就好了 类似于我这样

file

1年前 评论
my38778570 (楼主) 1年前
阿珂 (作者) 1年前
讨论数量: 19

写个 trait,然后在模型中 use

<?php

namespace App\Traits;

use Carbon\CarbonInterface;

trait DefaultDateFormat
{
    protected function serializeDate(\DateTimeInterface $date): string
    {
        return $date->format(CarbonInterface::DEFAULT_TO_STRING_FORMAT);
    }
}
1年前 评论

嗯...难道不应该把所有模型都继承自一个基础模型吗?然后在基础模型里面加不就好了?

1年前 评论
my38778570 (楼主) 1年前
chowjiawei

'timezone' => 'Asia/Shanghai', 然后 数据表清空 重新插入 再查询 要不然查出来的 还是原来的差8小时的时间

1年前 评论
Diudiuuuu 1年前
my38778570 (楼主) 1年前
chowjiawei (作者) 1年前

env 配置 DB_TIMEZONE=+08:00

1年前 评论

你自己都说了'timezone' => 'PRC', 时间戳是不分地区的 显示的时候才分地区显示,datetime直接入库就是设置的时间,显示的时候就是数据库里的数据原样显示的

1年前 评论
my38778570 (楼主) 1年前

建議統一使用 UTC 時間儲存在 DB 中 時區顯示 的問題 就交給前端處理

$post->created_at->toJson();

前端 vue example

<template>
  <div>
    {{ format(parseISO(state.filters['fromDate']), 'yyyy-MM-dd HH:mm') }} 
    ({{ Intl.DateTimeFormat().resolvedOptions().timeZone }})
  </div>
</template>

// import format from 'date-fns/format'
// import formatISO from 'date-fns/formatISO'
// import parseISO from 'date-fns/parseISO'
1年前 评论
DonnyLiu

检查一下这两个配置是否正常设置了

//config/app.php
'timezone' => env('APP_TIMEZONE','PRC'),

//config/database.php
'mysql' => [
    'timezone' => env('DB_TIMEZONE', '+08:00'),
],
1年前 评论
my38778570 (楼主) 1年前

创建一个基类就好了呀,所有的model都继承那个基类,基类里边改时间格式就行了,如果你说model是命令创建的,那你可以把model的存根文件发布出来,修改一下就好了 类似于我这样

file

1年前 评论
my38778570 (楼主) 1年前
阿珂 (作者) 1年前

你自己实现一个makeCommand类来创建继承BaseModel.的命令,然后在baseModel里创建这个方法。之后的模型都继承它,php artisan make:custorm-model UserModel,可以看看Laravel 自定义创建命令

1年前 评论

file 只要把红框这一行替换成你写的基类文件就好了

1年前 评论
mengdodo
use DefaultDatetimeFormat;
1年前 评论

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