【问题标题】:CJuiDatePicker in CGridView and values in UNIX timestamp don't work?CGridView 中的 CJuiDatePicker 和 UNIX 时间戳中的值不起作用?
【发布时间】:2014-06-04 11:48:53
【问题描述】:

在数据库字段中,“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;'),
        ),

问题: 我需要排序以在所选日期发生。怎么做?

【问题讨论】:

  • XHR 显示​​选择日期后,例如 Page[created]:13.05.2014,如果我理解正确,它必须采用 UNIX 时间戳格式才能显示排序值。跨度>

标签: php yii cgridview


【解决方案1】:

你有两种可能:

一:专业/复杂的方式

您为 unix 格式的日期提供了一个附加字段。日期选择器有这个选项来指定一个用于显示目的(人类可读格式)的字段和一个用于数据操作目的的字段。由于您需要将其与您的请求一起发送,因此您必须告诉 cdgridview 包含其他(隐藏)字段。您可以通过为包含时间戳的附加字段提供一个 css 类并将相同的类设置为 cgridview (http://www.yiiframework.com/doc/api/1.1/CGridView#filterSelector-detail) 的 filterSelector-property 来实现这一点。这样它将与 ajax-request 一起发送。

二:简单的方法

在模型的搜索方法中,您首先检查是否使用 if (strpos($this->created, '.')) 发送了人类可读的日期,然后在将其与 db 值进行比较之前对其进行简单解析...绝对是更简单的方法!搜索方法中的完整代码如下所示:

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

希望对你有帮助!

【讨论】:

  • 谢谢。但是送回来后就变成了UNIX格式,不适合用户使用。
猜你喜欢
  • 1970-01-01
  • 2012-12-20
  • 2011-04-11
  • 2023-04-03
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
相关资源
最近更新 更多