我在CGridView中将日期显示为:“2012年6月22日22:53”,其中:
array('name' => 'date',
'value' => date("j.n.Y G:i", strtotime($model->date))
),
但在我的过滤器中,我需要以这种格式(在数据库中)进行搜索才能得到结果:“2012年6月22日22:53”。
如何使过滤器以CGridView中显示的格式工作?我搜索了一个答案,但没有找到,我还尝试在模型search()中为该属性添加日期函数:
$criteria->compare('date', date("j.n.Y G:i", strtotime($this->date), true);
但之后我只得到了一个空列表:)
我们将非常感谢您的帮助。
3条答案
按热度按时间3hvapo4f1#
开始,您不应该使用
value
属性来控制日期的格式。正确的方法是将type
属性设定为'date'
,如果您还没有这样做,请将CApplication.language
设定为适当的区域设置。对于过滤器,最好使用
CJuiDatePicker
小部件让用户直观地选择日期;有一个简短简明指南介绍了如何执行here。更新:
使用
type == 'date'
对列进行格式化是通过CGridView.formatter
完成的,如果没有显式设置值,则默认值为'format'
应用程序组件的值。然后将该示例分配给
CGridView.formatter
。8oomwypt2#
compare()用输入生成一个sql语句,所以我不得不将输入更改为我想要的格式。
我职责:
这样,用户可以输入格式为“j.n.Y H:i”的日期,也可以只输入该格式的一部分(j.n,n.Y,Y H:i,...)。
我要感谢Jon和nickb的帮助!link
jogvjijk3#
和其他人一样,我也在这个问题上挣扎,很好地显示网格不是问题,但在本地化的日期时间中过滤是问题!所以我创建了自己的格式化程序,在我的模型的
search()
函数中使用它(当将搜索参数传递给compare()
时),它的工作就像一个魅力。我现在可以在任何本地化的日期/日期时间字段上过滤(我使用荷兰语):我的本地化:
我的CGridView包含以下日期时间列:
还有我自己的格式化程序,其中包含一些方便的函数:
在CActiveRecord模型的
search()
函数中,我使用以下代码将本地化的日期时间与数据库中的记录进行比较:请注意这里的
trim()
,这是设计上的(参见函数描述formatToDatabaseDateTime())。与直接以正确的数据库格式进行过滤有很大的区别:无效日期转换为“1970-01-01”!
我非常感谢反馈,我真的希望我的代码能帮助别人!