Yii的一个新手问题: 我在Yii中有一个包含日期时间字段的表模型。
我正在使用CActiveForm来显示此字段:
<div class="row">
<?php echo $form->labelEx($model,'createdon'); ?>
<?php echo $form->textField($model,'createdon', array('id'=>'createdon')); ?>
<?php echo $form->error($model,'createdon'); ?>
</div>
但显示的文本字段是日期时间格式来自MySQL,即yyyy-mm-dd hh:mm:ss
如何将文本字段上显示的格式更改为其他时间格式? (可能是dd / mm / yy或mm / dd / yy或其他)
任何帮助将不胜感激。
谢谢!
答案 0 :(得分:26)
如果您希望以一种格式存储日期,但以其他格式(即多个视图)显示,则考虑在模型中更改它。
例如:
class Whatever extends CActiveRecord
{
protected function afterFind ()
{
// convert to display format
$this->createdon = strtotime ($this->createdon);
$this->createdon = date ('m/d/Y', $this->createdon);
parent::afterFind ();
}
protected function beforeValidate ()
{
// convert to storage format
$this->createdon = strtotime ($this->createdon);
$this->createdon = date ('Y-m-d', $this->createdon);
return parent::beforeValidate ();
}
}
您覆盖哪些方法取决于您要实现的目标。
- 自定义CActiveRecord提供了一些占位符方法 可以在子类中重写以自定义其工作流。
醇>
- beforeValidate和afterValidate:这些是在之前和之后调用的 验证执行。
- beforeSave和afterSave:调用它们 保存AR实例之前和之后。
- beforeDelete和afterDelete: 这些是在删除AR实例之前和之后调用的。
- afterConstruct:为每个使用创建的AR实例调用此方法 新的运营商。
- beforeFind:这是在AR查找程序之前调用的 用于执行查询(例如find(),findAll())。
- afterFind:这是 在作为查询结果创建的每个AR实例之后调用。
答案 1 :(得分:3)
这对我有用:
class SomeClass extends CActiveRecord
{
protected function afterFind()
{
// convert to display format
$this->my_date_time = DateTime::createFromFormat('Y-m-d H:i:s', $this->my_date_time)->format('d-m-Y');
parent::afterFind();
}
protected function beforeSave()
{
// convert to storage format
$this->my_date_time = DateTime::createFromFormat('d-m-Y', $this->my_date_time)->format('Y-m-d H:i:s');
return parent::beforeSave();
}
}
答案 2 :(得分:1)
您只需使用CDateFormatter
及其方法format
或者您可以使用本机PHP的方式使用函数date
我认为PHP
手册中有很多关于格式化选项的例子(以及每个格式修饰符的含义的解释),所以要弄清楚问题不是问题,但如果你有Yii的CDateFormatter
有任何问题,我可以给你一些例子。