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?

¿Fue útil?

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!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top