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 забезпечують узгоджений формат дат у всій аплікації, надаючи при цьому гнучкість для специфічних випадків використання