Налаштування форматів дат моделей у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 07 січня, 2025
Laravel пропонує різні способи управління форматуванням дат при серіалізації моделей в масиви або JSON. Дізнайтеся, як реалізувати гнучкість у представленні дат завдяки практичним прикладам у системі бронювання

Laravel пропонує кілька способів контролю формату дат при серіалізації моделей в масиви або JSON. Від глобальних форматів до специфічних налаштувань атрибутів — ви можете забезпечити уніфіковану подачу дат у вашій аплікації.

<?php
 
namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
use DateTimeInterface;
 
class BaseModel extends Model
{
    protected function serializeDate(DateTimeInterface $date)
    {
        return $date->format('Y-m-d H:i:s');
    }
}

Розгляньмо практичний приклад управління різними форматами дат у системі бронювання:

<?php
 
namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\Attribute;
use DateTimeInterface;
 
class Booking extends Model
{
    protected $casts = [
        'check_in' => 'datetime:Y-m-d',
        'check_out' => 'datetime:Y-m-d',
        'created_at' => 'datetime:Y-m-d H:i:s',
    ];
 
    protected function serializeDate(DateTimeInterface $date)
    {
        return $date->format('Y-m-d H:i:s');
    }
 
    protected function checkInFormatted(): Attribute
    {
        return Attribute::make(
            get: fn () => $this->check_in->format('l, F j, Y')
        );
    }
 
    protected function duration(): Attribute
    {
        return Attribute::make(
            get: fn () => $this->check_in->diffInDays($this->check_out)
        );
    }
 
    public function toArray()
    {
        return array_merge(parent::toArray(), [
            'check_in_formatted' => $this->checkInFormatted,
            'duration_nights' => $this->duration,
            'human_readable' => sprintf(
                '%s for %d nights',
                $this->check_in->format('M j'),
                $this->duration
            )
        ]);
    }
}

Функції серіалізації дат у Laravel забезпечують узгоджений формат дат у всій аплікації, надаючи при цьому гнучкість для специфічних випадків використання