Laravel 5.1 date_format validation permite dos formatos

Utilizo la validación de fecha siguiente para la solicitud POST entrante.

'trep_txn_date' => 'date_format:"Ymd H:i:su"' 

Esto solo permitirá una fecha de este tipo, es decir, 2012-01-21 15: 59: 44.8

También quiero permitir la fecha sin TIME, por ejemplo, 2012-01-21, que cuando se envíe a mysql db se almacenará automáticamente como 2012-01-21 00: 00: 00.0

¿Hay alguna manera de hacerlo utilizando las reglas de validación existentes de Laravel? ¿Hay alguna manera de definir múltiples formatos en date_format rule algo como a continuación?

 'trep_txn_date' => 'date_format:"Ymd H:i:su","Ymd"' //btw this didn't work. 

Gracias,

K

El validador de date_format toma solo un formato de fecha como parámetro. Para poder usar formatos múltiples, necesitarás construir una regla de validación personalizada. Afortunadamente, es bastante simple.

Puede definir la validación de fecha de formato múltiple en AppServiceProvider con el siguiente código:

 class AppServiceProvider extends ServiceProvider { public function boot() { Validator::extend('date_multi_format', function($attribute, $value, $formats) { // iterate through all formats foreach($formats as $format) { // parse date with current format $parsed = date_parse_from_format($format, $value); // if value matches given format return true=validation succeeded if ($parsed['error_count'] === 0 && $parsed['warning_count'] === 0) { return true; } } // value did not match any of the provided formats, so return false=validation failed return false; }); } } 

Luego puede usar esta nueva regla de validación así:

 'trep_txn_date' => 'date_multi_format:"Ymd H:i:su","Ymd"' 

Puede leer más sobre cómo crear reglas de validación personalizadas aquí: http://laravel.com/docs/5.1/validation#custom-validation-rules