eloquent 查询 laravel 后更改日期格式

Change date format after eloquent query laravel

执行此查询后:

public function qryRecords($id)
    {
        $records = Record::with('place.country', 'place.city', 'place.organisation', 'framework', 'academy_year', 'status', 'type', 'student')
            ->where('student_id', '=', $id)
            ->get();

        return response()->json($records);
    }

我想更改 academy_year 的日期格式,这是它在我的数据库中的保存方式:

[
                    'start_date' => '2015-09-01',
                    'created_at' => now(),
                    'end_date' => '2016-06-30',
                    'is_archived' => true
                ],

现在在我的模型中,我这样做是为了获取数据表中的日期:

{
                        data: null,
                        render: function (data) {
                            return data.academy_year.start_date + ' <i class="fas fa-arrow-right"></i> <br> ' + data.academy_year.end_date;
                        }
                    },

我知道 Carbon 方法,但我不确定如何在我的情况下使用它。 如果 Carbon 可行,我很想听听,还有我可以使用的其他方法。

有两种方法可以做到这一点,第二个选项与第一个选项层:

  1. 在您的模型中使用日期修改器(https://laravel.com/docs/7.x/eloquent-mutators#date-mutators)

记录模型:

protected $dates = [
        'start_date',
        'end_date'
    ];

然后,如果您想将日期用于您的自定义格式,请执行以下操作:

$record->start_date->format('d-m-Y');//Customize format as you want.

如果以后不需要更改格式,只需要使用几次,我会使用此选项。

  1. 使用访问器(https://laravel.com/docs/7.x/eloquent-mutators#defining-an-accessor):(与答案 1 结合使用)

记录模型:

function getFormattedStartDateAttribute()
{
    return $this->start_date->format('d-m-Y');
}

当你想要格式化日期时,你可以这样做:

$record->formatted_start_date;

我更喜欢第二个选项,因为那样你必须定义一次输出格式,然后每次你想要 'front-end-format'

时使用 $record->formatted_start_date

让我知道它是否适合你:)

如果您对附加库没问题,可以尝试 Moment.js。

例如:

{
  data: null,
  render: function (data) {
    var formatted_start_date = moment(data.academy_year.start_date).format('dd.mm.yyyy')
    var formatted_end_date = moment(data.academy_year.end_date).format('dd.mm.yyyy')
    return formatted_start_date + ' <i class="fas fa-arrow-right"></i> <br> ' + formatted_end_date;
 }
},

如果您想要不同的格式,请参阅格式文档。 https://momentjs.com/docs/#/displaying/format/

在 laravel 中,他们有资源来格式化 JSON 数据。你可以用它来修改你的日期格式

更多信息在这里: https://laravel.com/docs/7.x/eloquent-resources