更改 Laravel DataTables 时间格式

Change Laravel DataTables time format

在我的订单 table 中,created_at 列以这种格式保存:Y-m-d H:i:s

但是在数据table中是这样显示的

我将此代码添加到订单模型中:

public function getCreatedAtAttribute($date)
{
    return is_null($date)
        ? ''
        : Carbon::createFromFormat('Y-m-d H:i:s', $date)->timezone(config('app.timezone'))->toDateTimeString();
}

public function getUpdatedAtAttribute($date)
{
    return is_null($date)
        ? ''
        : Carbon::createFromFormat('Y-m-d H:i:s', $date)->timezone(config('app.timezone'))->toDateTimeString();
}

但在此之后,数据 table 不起作用并且 returns 出现以下错误:

DataTables warning: table id=DataTables_Table_0 - Ajax error. For more information about this error, please see http://datatables.net/tn/7

我该如何解决?

有很多方法可以做到这一点,您可以通过您的控制器来做到这一点:

return Datatables::of($query)
  ->addColumn('created_at', function ($row){
       return $row->created_at->format('d-M-Y');
})

Alternative :Laravel 7 在 Eloquent 模型上使用 toArray 或 toJson 方法时使用新的日期序列化格式。 以前,日期将被序列化为如下格式:

2020-12-02 20:01:00

使用 ISO-8601 格式序列化的日期将显示为:

2020-12-02T20:01:00.283041Z

如果您想继续使用以前的行为,您可以覆盖模型上的 serializeDate() 方法:

use DateTimeInterface;

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

查看官方升级文档here

你可以用 DateTime



$customDate='2020-12-02T20:01:00.283041Z';

$date=new DateTime($customDate);

echo $date->format('y-m-d H:i:s');