Eduardo Quiñonez
Eduardo Quiñonez

Reputation: 119

Change automatically the format of date fields (Laravel)

I'm looking for a DateTime Mutator that change the format of dates, I'm working with Oracle DB and the admitted Format is (DD/MM/YYYY) and the input type "date" stores dates in (YYYY,MM,DD) format.

I found the $date function and a trait by Torzer, but I have to indicate the fields that I want to convert the format.

is there some trait or function that detect all date fields and convert them automatically in a format (DD/MM/YYYY)? this without indicate the field.

nowadays I use protected $date in my model:

protected $dates = [ 'fecha_nac', 'fecha_nac1', 'fecha_nac2', ];

Upvotes: 0

Views: 1385

Answers (2)

Ali
Ali

Reputation: 776

By default laravel uses date formate 'Y-m-d H:i:s' if you want to use a different format you can customize it in your model in the following way.

    protected $dateFormat = 'your date formate';

in your case it will be.

    protected $dateFormat = 'd-m-Y';

Upvotes: 1

Jan Richter
Jan Richter

Reputation: 2086

You can override the getDates method on HasAttributes trait.

/**
 * Get the attributes that should be converted to dates.
 *
 * @return array
 */
public function getDates()
{
    $defaults = [static::CREATED_AT, static::UPDATED_AT];

    return $this->usesTimestamps()
                ? array_unique(array_merge($this->dates, $defaults))
                : $this->dates;
}

On your model:

public function getDates()
{
    $dates = parent::getDates();

    // add your dynamic logic here

    return $dates;
}

I would really go for explicitly defining which fields should be converted as these dynamic operations can be expensive if you are working with the model quite a lot.

Upvotes: 0

Related Questions