¿Qué es DateRange Validator extensión para yii2?
DateRange Validator permite validar si un atributo tiene un formato de rango de fecha válido (ej. 2018/05/20-2018/07/20). Esto es especialmente útil cuando en la vista se usa un componente tipo DateRangePicker en el que se necesita filtrar la fecha con un formato desde/hasta.
Instalación
Para realizar la instalación mediante composer:
Ejecutando:
php composer.phar require --prefer-dist nerburish/yii2-daterange-validator "dev-master"
O añadiendo la siguiente línea en la sección “requiere” del archivo composer.json
"nerburish/yii2-daterange-validator": "dev-master"
Ejemplo
Imagina que usamos un widget tipo Kartik DataRangePicker (ver en http://demos.krajee.com/date-range) y necesitamos filtrar por un rango de fecha un attributo tipo Datetime (por ejemplo el attributo created_at).
Tendríamos que ir al modelo de búsqueda, añadir las variables $fromDate( fecha desde) y $untilDate (fecha hasta) y por último añadir la regla en el método rules().
use nerburish\daterangevalidator\DateRangeValidator;
public $fromDate;
public $untilDate;
public function rules()
{
return [
[['created_at'], DateRangeValidator::className()]
];
}
Si al validar nuestro modelo de búsqueda, $fromDate y $untilDate tienen un formato de rango de fecha válido. A estas variable se les asignará su respectivo valor de timsetamp. Esto permitirá que podamos usar un query como el siguiente sin tener que preocuparnos más de parsear y válidar los posibles valores que podría recibir el atributo.
$query->andFilterWhere(['between', 'created_at', $this->fromDate, $this->untilDate]);
Si queramos dar otros nombres a las variables de fecha, se puede configurar de la siguiente manera:
use nerburish\daterangevalidator\DateRangeValidator;
public $myInitialDateName;
public $myUntilDateName;
public function rules()
{
return [
[['created_at'], DateRangeValidator::className(), 'fromDateAttribute' => 'myInitialDateName', 'untilDateAttribute' => 'myUntilDateName']
];
}
Por defecto, el formato válido de las variables from y until es el configurado como dateFormat en el componente Formatter de la aplicación. No obstante, se pueden configurar otros formatos a través de parámetros. Como el formato date solo incluye la fecha y no la hora. Y automáticamente la hora del formDate serán las 00:00:00 y el untilDate 23:59:59
Además, nosotros podemos cambiar el separador de caracteres.Ex: 12-08-2014 / 17-08-2015
public function rules()
{
return [
[['created_at'], DateRangeValidator::className(), 'format' => 'php:d-m-Y', 'separator' => ' / ']
];
}
También se puede cambiar el delimitador de la siguiente manera el yii2 daterange validator:
public function rules()
{
return [
[['created_at'], DateRangeValidator::className(), 'type' => 'datetime', 'format' => 'php:d/m/Y H:i:s']
];
}
Si sólo quisiéramos validar que el formato de rango es correcto, pero no asignarlo a ninguna variable. El parámetro setAttributes debe ser false para que el componente no lancé una excepción al intentar asignar las variables para el daterange validator.
public function rules()
{
return [
[['created_at'], DateRangeValidator::className(), 'setAttributes' => false]
];
}