CJuiDatePicker en el CGridView y valores en UNIX timestamp no funcionan?
Pregunta
En la base de datos el valor del campo "creó" es almacenado en un timestamp de UNIX.Después de seleccionar la fecha en la CJuiDatePicker no pasa nada, aunque dicha fecha.Aquí está el código:
this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $model->search(),
'enableSorting'=>false,
'filter'=>$model,
'afterAjaxUpdate'=>"function() {
jQuery('#Page_created').datepicker(jQuery.extend(jQuery.datepicker.regional['en'],{'showAnim':'fold','dateFormat':'dd.mm.yy','changeMonth':'true','showButtonPanel':'true','changeYear':'true'}));
}",
'columns' => array(
'title' => array(
'name'=>'title',
// 'header'=>'Title',
'type'=>'raw',
'value'=>'CHtml::link($data->title,Yii::app()->request->baseUrl."/page/".$data->id)',
'headerHtmlOptions' => array('style'=>'width:250px;'),
),
array(
'name'=>'created',
'type'=>'raw',
'value' => 'date("j.m.Y", $data->created)',
'filter'=>false,
'filter'=>$this->widget('zii.widgets.jui.CJuiDatePicker', array(
'model'=>$model,
'attribute'=>'created',
'language'=>'en',
'options'=>array(
'showAnim'=>'fold',
'dateFormat'=>'dd.mm.yy',
'changeMonth' => 'true',
'changeYear'=>'true',
'showButtonPanel' => 'true',
),
),true),
'htmlOptions' => array('style' => 'width:90px;'),
),
Pregunta: Necesito ordenar a producir en la fecha seleccionada.Cómo hacerlo?
Solución
Tienes dos posibilidades:
Uno:El profesional / complejo
Usted proporciona un campo adicional para la fecha en unix formato.el selector de fechas tiene esta opción para especificar un campo de visualización (formato legible) y uno para los datos de la manipulación-fines.como usted necesita para enviar esta con su solicitud, usted tiene que decirle cdgridview para incluir otros (oculto) de los campos.puede que este dando su campo adicional que contiene la marca de tiempo de una clase css y el conjunto de la misma clase a la filterSelector-propiedad de cgridview (http://www.yiiframework.com/doc/api/1.1/CGridView#filterSelector-detail).de esa manera será enviado con el ajax de solicitud.
Dos:La manera más fácil
En la búsqueda por el método de su modelo primero se comprueba si legible la fecha en que fue enviado con if (strpos($this->created, '.'))
y simplemente analizarlo antes de comparar el valor de db...sin duda la forma más fácil!El código completo dentro de su búsqueda-método podría tener este aspecto:
public function search() {
//parse date if necessary
if (strpos(($this->created, '.')) {
$this->created = CDateTimeParser::parse($this->created, 'dd.MM.yy');
}
$criteria = new CDbCriteria();
//other compares...
$criteria->compare('created', $this->created);
//even more compares...
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
Para ver todos los análisis de los formatos de sólo echa un vistazo a el código de CDateTimeParser en GitHub...se encuentra de todo derecho en la clase de comentario en la parte superior: https://github.com/yiisoft/yii/blob/master/framework/utils/CDateTimeParser.php
Espero que ayude!