Estoy luchando con los formatos de fecha de Laravel, usándolo con PgSQL.
Mi necesidad :
Ymd\TH:i:s\Z (ejemplo: 2016-05-13T10:05:00Z)Ymd H:i:s (ejemplo: 2016-05-13 10:05:00)La parte difícil es configurar Laravel para que acepte globalmente un formato de fecha particular en la entrada y salida, pero sin cambiar el formato "interno".
Se puede anular una propiedad para personalizar el formato, pero actúa globalmente:
protected $dateFormat = 'Ymd\TH:i:s\Z'; Esto genera errores al recuperar fechas de la base de datos (intentar convertir una fecha PgSQL con una máscara personalizada: InvalidArgumentException ).
Me gustaría evitar usar un Middleware o hacerlo manualmente en cada respuesta del controlador, ¿hay alguna forma?
Parece que quieres usar accesores y mutadores. Aquí hay un ejemplo básico con una clase que tiene una columna my_date , la conversión puede no ser exactamente correcta (supongo que strtotime() funcionará), pero debería ser fácil de arreglar.
class SomeModel extends Model { // triggered whenever you retrieve the date from the db public function getMyDateAttribute($value) { return date('Ymd\TH:i:s\Z', strtotime($value)); } // triggered whenever you insert the date into the db public function setMyDateAttribute($value) { $this->attributes['my_date'] = date('Ymd H:i:s', strtotime($value)); } }Ahora, su base de datos puede usar un formato de fecha y hora y las otras partes de su aplicación pueden usar otro. Si desea que sea reutilizable para otros modelos, puede extraerlo a un rasgo siempre que las columnas tengan el mismo nombre.