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

Php YII:如何更改视图上显示的日期时间格式,php,datetime,view,model,yii,Php,Datetime,View,Model,Yii,Yii中的新手问题: 我有一个Yii格式的表模型,其中包含一个datetime字段 我正在使用CActiveForm显示此字段: <div class="row"> <?php echo $form->labelEx($model,'createdon'); ?> <?php echo $form->textField($model,'createdon', array('id'=>'createdon')); ?>

Yii中的新手问题: 我有一个Yii格式的表模型,其中包含一个datetime字段

我正在使用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>

但显示的文本字段是datetime格式,来自MySQL,即yyyy-mm-dd hh:mm:ss

如何将文本字段上显示的格式更改为其他时间格式? (可能是年月日或年月日或其他)

任何帮助都将不胜感激

谢谢

你所需要的就是使用它的方法

或者您可以使用原生PHP的方式使用函数格式化日期


我认为
PHP
手册中有很多关于格式化选项的示例(以及对每个格式修饰符的含义的解释),所以弄清楚这些并不成问题,但是如果您对Yii的
CDateFormatter
有任何问题,我可以给您一些示例。

如果您希望以一种格式存储日期,但是以另一种格式(即多个视图)显示,然后考虑在模型中改变它。 例如:

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实例之前和之后
    • 删除前和删除后: 在删除AR实例之前和之后都会调用它们
    • afterConstruct:对于使用 新接线员
    • beforeFind:这是在AR查找程序启动之前调用的 用于执行查询(例如find()、findAll()
    • 后发现:这是 在作为查询结果创建的每个AR实例之后调用
  • 这对我很有用:

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

    在将值显示在表单上之前,应在何处设置其格式?我可以用这样的东西吗??或者在yii模型上是否有任何事件或行为可以执行?基本上,您希望根据区域设置对日期进行格式化(您可以使用设置区域设置)。在我看来,我通过了
    CDateFormatter
    ——这不会让我太烦恼。如果你的项目被本地化为你的区域,而你不考虑将它本地化到其他区域,你可以使用<代码>日期('D-M y),。将[
    CDateFormatter
    ]与[
    CLocale
    ]结合使用会更方便。“或者在yii模型上有任何事件或行为可以执行吗?”。我没有,但我想你可以附加一个行为。嘿。。。谢谢,afterFind()方法就是我一直在寻找的方法:)