En este tema les quiero mostrar como realizar búsqueda entre fechas en el GridView, en este caso voy a usar la tabla auditoria y el campo fecha_auditoria va a tener la opción para filtrar entre fechas.
Modelo Auditoria (Las modificaciones que se deben hacer en el modelo):
<?php
class Auditoria extends CActiveRecord
{
public $date_first; //Agregar esta variable
public $date_last; //Agregar esta variable
//Agregar date_first, date_last en el search en la función rules()
public function rules()
{
return array(
array('fecha_auditoria', 'required'),
array('usuario, modelo, accion', 'length', 'max'=>50),
array('campo, camponuevovalor, campoviejovalor', 'safe'),
array('date_first, date_last,id_auditoria, usuario, modelo, accion, fecha_auditoria, campo, camponuevovalor,campoviejovalor', 'safe', 'on'=>'search'),
);
}
//Antes del return agregar lo siguiente en el search(), cabe recalcar que fecha_auditoria es el campo que utilizo en este ejemplo
public function search()
{
//Esto es lo que se debe agregar
if((isset($this->date_first) && trim($this->date_first) != "") && (isset($this->date_last) && trim($this->date_last) != ""))
$criteria->addBetweenCondition('fecha_auditoria', ''.$this->date_first.'', ''.$this->date_last.'');
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
Vista auditoria/admin.php (Las modificaciones que se deben hacer en la vista admin):
//Esto se debe agregar antes del código del GridView
<?php
// this is the date picker
$dateisOn = $this->widget('zii.widgets.jui.CJuiDatePicker', array(
/*'model'=>$model,
'attribute' => 'date_first',*/
'name' => 'Auditoria[date_first]',
'value' => $model->date_first,
'language'=>'es',
'options'=>array(
'showAnim'=>'fold',
'dateFormat'=>'yy-mm-dd',
'changeMonth' => 'true',
'changeYear'=>'true',
'constrainInput' => 'false',
),
'htmlOptions'=>array(
'style'=>'height:20px;width:70px;',
),
),true) . '<br> a <br> ' . $this->widget('zii.widgets.jui.CJuiDatePicker', array(
/*'model'=>$model,
'attribute' => 'date_last',*/
'name' => 'Auditoria[date_last]',
'value' => $model->date_last,
'language'=>'es',
'options'=>array(
'showAnim'=>'fold',
'dateFormat'=>'yy-mm-dd',
'changeMonth' => 'true',
'changeYear'=>'true',
'constrainInput' => 'false',
),
'htmlOptions'=>array(
'style'=>'height:20px;width:70px',
),
),true);
?>
//Esto se debe agregar en el código del GridView
'id'=>'auditoria-grid',
'type'=>'striped bordered',
'dataProvider'=>$model->search(),
'afterAjaxUpdate'=>"function() { //Esto es lo que hay que agregar
jQuery('#Auditoria_date_first').datepicker(jQuery.extend({showMonthAfterYear:false}, jQuery.datepicker.regional['es'], {'showAnim':'fold','dateFormat':'yy-mm-dd','changeMonth':'true','showButtonPanel':'true','changeYear':'true','constrainInput':'false'}));
jQuery('#Auditoria_date_last').datepicker(jQuery.extend({showMonthAfterYear:false}, jQuery.datepicker.regional['es'], {'showAnim':'fold','dateFormat':'yy-mm-dd','changeMonth':'true','showButtonPanel':'true','changeYear':'true','constrainInput':'false'}));
}",
'filter'=>$model,
//luego se debe cambiar 'fecha_auditoria', por este codigo:
array(
'name'=>'fecha_auditoria',
'filter'=>$dateisOn,
'value'=>'$data->fecha_auditoria'
),
Haciendo esas modificaciones ya van a tener 100% funcional la búsqueda entre fechas, para que pueden utilizar estos códigos nada más deben de adaptarle al modelo y vista admin que deseen, básicamente lo que deben de cambiar es la fecha_auditoria por el campo que deseen, también deben de cambiar (Auditoria[date_first] , Auditoria[date_last] , #Auditoria_date_first , #Auditoria_date_last) por el nombre de su modelo, eso en la vista admin.


Hola Rodrigo, primero que todo agradecerte por el tuto, completamente funcional, quisiera que me orientaras haciendo algo que creo es muy similar, pero que aun no me sale, es buscar por rango pero de codigos, tengo una columna de codigos en mi tabla, ejm: opo, tafles, etc, lo estoy haciendo con dos JuiAutoComplete que estan funcionales ps me autocompletan los codigos que tengo en mi BD, pero no he podido lograr que me filtre.
Ya lo pude solucionar todo esta bien, solo que estaba enviando mal el identificador de mis campos en la funcion jQuery, Rodrigo me podrias decir como le diste formato a tu tabla es que actualmente tengo el que trae por defecto Yii y no se ve muy bn, quisiera saber como es el formato de la imagen que tienes en el inicio del post, muchas gracias.
Hola gifrancohe, que bueno que ya lo solucionaste, te comento, tenés que descargarte lo siguiente: http://yiibooster.clevertech.biz/ , también podés ver esto: http://www.programacion.com.py/web/php/temas-en-yii
Saludos,
Hola Rodrigo.
Quisiera que me ayudaras con un problema que tengo al intentar hacer una consulta en yii filtrando por un campo fecha de tipo timestamp. Esta es la consulta
$movimiento = Movimiento::model()->findByAttributes(array(‘cliente_idcliente’ => $cliente, ‘tipopublicacion_idtipopublicacion’ => $idpublicacion, ‘fechamov’ => $fecha));
Donde $fecha es un string de este tipo «2015-04-15» y en la base de datos tengo fechamov 2015-04-15 00:00:00 pero no he podido darle formato a $fecha para que coicida con fechamov en la base de datos y me arroje resultados en la consulta, quizas puedas ayudarme, te lo agradeceria.
Perfecto funcionamiento, muchas gracias por el aporte.