Yii2-保存和显示不同格式的DateTime

时间:2018-10-17 21:25:52

标签: php yii2 datetime-format

我需要以MySQL格式“ yyyy-mm-dd hh:mm:ss”保存属性“ created_at”,但以php格式“ d-m-Y”显示。

它在创建方案中工作正常,但是当我更新任何属性并保存时,它会自动覆盖数据库中的“ created_at”并设置为“ 0000-00-00 00:00:00”。 我在模型 beforeValidade() afterFind()中使用了两个函数。

common \ models \ Oficios.php

public function beforeValidate()
{
    if ($this->scenario == self::SCENARIO_CREATE){
        $this->created_at = date('Y-m-d H:i:s');
    }else {
        $this->created_at = $this->created_at;
    }

    return parent::beforeValidate(); 
}

public function afterFind ()
{
    // convert to display format
    $this->created_at = strtotime ($this->created_at);
    $this->created_at = date ('d-m-Y', $this->created_at);

    parent::afterFind ();
}

4 个答案:

答案 0 :(得分:1)

为什么不在数据模型中使用TimestampBehavior?您可以通过这种行为(https://www.yiiframework.com/doc/guide/2.0/en/concept-behaviors#using-timestamp-behavior)轻松解决此问题,而无需手动进行。

如文档中所述:

  

此行为支持自动更新时间戳记属性   只要通过insert()保存模型,就可以创建Active Record模型   update()或save()方法

答案 1 :(得分:0)

您可以尝试以下方法:

public function rules()
{
    return array(
        ...
        array('created_at','default',
              'value'=>date('Y-m-d H:i:s'),
              'setOnEmpty'=>false,'on'=>'insert')
    );
}

并消除函数“ beforeValidate”

希望对您有帮助。

答案 2 :(得分:0)

您始终可以使用行为。这是更干净,更高级的方法。您可以控制模型具有的所有事件。这是示例:

public function behaviors()
    {
        return [
            [
                'class' => TimestampBehavior::class,
                'createdAtAttribute' => 'created_at',
                'updatedAtAttribute' => 'created_at',
                'value' => date('Y-m-d H:i:s')
            ],
            [
                'class' => AttributeBehavior::class,
                'attributes' => [
                    ActiveRecord::EVENT_AFTER_FIND => 'created_at'
                ],
                'value' => function ($model) {
                    // Any Format you want
                    return date('d-m-Y', strtotime($model->created_at));
                }
            ]
        ];
    }

答案 3 :(得分:0)

如果created_at像使用Yii::$app->formatter->asDate($model->created_at,'d-m-Y')一样保存为Unix