CGridView 中的 CJuiDatePicker 和 UNIX 时间戳中的值不起作用?
题
在数据库中,字段值“created”存储在 UNIX 时间戳中。在 CJuiDatePicker 中选择日期后,即使是这样的日期,也不会发生任何事情。这是代码:
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;'),
),
问题:我需要排序以发生在选定的日期。怎么做?
解决方案
你有两种可能性:
一:专业/复杂的方式
您为 unix 格式的日期提供一个附加字段。日期选择器具有此选项来指定用于显示目的(人类可读格式)的字段和用于数据操作目的的字段。由于您需要将其与请求一起发送,因此您必须告诉 cdgridview 包含其他(隐藏)字段。您可以通过为包含时间戳的附加字段提供一个 css-class 并将相同的类设置为 cgridview 的 filterSelector-property (http://www.yiiframework.com/doc/api/1.1/CGridView#filterSelector-detail)。这样它将与 ajax 请求一起发送。
二:最简单的方法
在模型的搜索方法中,您首先检查是否发送了人类可读的日期 if (strpos($this->created, '.'))
并在将其与数据库值进行比较之前简单地解析它......绝对是更简单的方法!搜索方法中的完整代码可能如下所示:
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,
));
}
要查看所有解析格式,只需查看 GitHub 上的 CDateTimeParser 代码...您可以在顶部的类注释中找到所有内容: https://github.com/yiisoft/yii/blob/master/framework/utils/CDateTimeParser.php
希望能帮助到你!
不隶属于 StackOverflow