YII:如何更改视图上显示的日期时间格式

时间:2011-07-25 04:10:31

标签: php datetime view model yii

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或其他)

任何帮助将不胜感激。

谢谢!

3 个答案:

答案 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 ();
    }
}

您覆盖哪些方法取决于您要实现的目标。

From the docs

  
      
  1. 自定义CActiveRecord提供了一些占位符方法   可以在子类中重写以自定义其工作流。      
        
    • beforeValidate和afterValidate:这些是在之前和之后调用的   验证执行。
    •   
    • beforeSave和afterSave:调用它们   保存AR实例之前和之后。
    •   
    • beforeDelete和afterDelete:   这些是在删除AR实例之前和之后调用的。
    •   
    • afterConstruct:为每个使用创建的AR实例调用此方法   新的运营商。
    •   
    • beforeFind:这是在AR查找程序之前调用的   用于执行查询(例如find(),findAll())。
    •   
    • afterFind:这是   在作为查询结果创建的每个AR实例之后调用。
    •   
  2.   

答案 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有任何问题,我可以给你一些例子。