Saltar al contenido

Daterange Validator para Yii2

daterange Validator

 ¿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-rangey 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]
	];
}