Yii2 View DateTime Format (d-m-Y H:i:s) But When Save/update in DB Change format to Y-m-d H:i:s

后端 未结 5 1536
礼貌的吻别
礼貌的吻别 2021-02-06 04:26

I\'m Using Kartik DateTimePicker Extension

field($model, \'Created\')->widget(DateTimePicker::classname(),[
        \'model\' => $model,
          


        
相关标签:
5条回答
  • 2021-02-06 05:00

    I have simple code, in behavior:

     public function behaviors() {
        return [
           [ 'class' => \yii\behaviors\TimestampBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => ['created_at'],
                ],
                // if you're using datetime instead of UNIX timestamp:
                 'value' => new Expression('NOW()'),
           ]
        ];
    }
    

    for rules:

     public function behaviors() {
        return [
           [ 'class' => \yii\behaviors\TimestampBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => ['created_at'],
                ],
                // if you're using datetime instead of UNIX timestamp:
                 'value' => new Expression('NOW()'),
           ]
        ];
    }
    
    0 讨论(0)
  • 2021-02-06 05:03

    Finally I found the answer using AttributeBehavior.

    In my model class I've write the behaviors code:

    public function behaviors()
    {
        return [
            [
                'class' => AttributeBehavior::className(),
                'attributes' => [
                    // update 1 attribute 'created' OR multiple attribute ['created','updated']
                    ActiveRecord::EVENT_BEFORE_INSERT => ['created','updated'],
                    ActiveRecord::EVENT_BEFORE_UPDATE => 'updated',
                ],
                'value' => function ($event) {
                    return date('Y-m-d H:i:s', strtotime($this->Created));
                },
            ],
        ];
    }
    

    My Model Class

        namespace frontend\models;
    
    use Yii;
    use yii\db\ActiveRecord;
    use yii\behaviors\AttributeBehavior;
    /**
     * This is the model class for table "product".
     *
     * @property integer $id
     * @property integer $product_id
     * @property string $product_name
     * @property string $created
     * @property string $updated
     */
    class Product extends ActiveRecord
    {
        public $csv_file;
    
        /**
         * @inheritdoc
         */
        public static function tableName()
        {
            return 'product';
        }
    
        public function behaviors()
        {
            return [
                [
                    'class' => AttributeBehavior::className(),
                    'attributes' => [
                        ActiveRecord::EVENT_BEFORE_INSERT => ['created','updated'], // update 1 attribute 'created' OR multiple attribute ['created','updated']
                        ActiveRecord::EVENT_BEFORE_UPDATE => 'updated', // update 1 attribute 'created' OR multiple attribute ['created','updated']
                    ],
                    'value' => function ($event) {
                        return date('Y-m-d H:i:s', strtotime($this->LastUpdated));
                    },
                ],
            ];
        }
    
        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                [['id', 'product_id', 'product_name', created, updated], 'required'],
    
            ];
        }
    
        /**
         * @inheritdoc
         */
        public function attributeLabels()
        {
            return [
                'id' => 'ID',
                'product_id' => 'Product ID',
                'product_name' => 'Product Name',
                'created' => 'Created',
                'updated' => 'Updated',
            ];
        }
    }
    

    If input format is d/m/Y then you need to replace the "/" by "-"

    like: input date(created): 10/09/2015

    date('Y-m-d H:i:s', strtotime(str_replace("/","-",$this->created)));
    
    0 讨论(0)
  • 2021-02-06 05:11

    use in active form

    'clientOptions' => ['alias' => 'dd-mm-yyyy'],

    use in active form

    echo MaskedInput::widget([
    'name' => 'input-31',
    'clientOptions' => ['alias' =>  'date']]);
    

    use class

    Class yii\widgets\MaskedInput

    Example

    <?= $form->field($model, 'date_of_birth')->widget(\yii\widgets\MaskedInput::className(), [
        'name' => 'input-31',
        'clientOptions' => ['alias' =>  'dd-mm-yyyy'],        ]) ?>   
    
    0 讨论(0)
  • 2021-02-06 05:25

    Need to just add this code before save/update model in controller.

    like,

    // ICU format
    $model->Created = Yii::$app->formatter->asDate($_POST['modelName']['Created'], 'yyyy-MM-dd HH:mm:ss'); // 2014-10-06 15:22:34
    

    OR

    // PHP date()-format
    $model->Created = Yii::$app->formatter->asDate($_POST['modelName']['Created'], 'php:Y-m-d H:i:s'); // 2014-10-06 15:22:34
    

    For more information refer this link

    0 讨论(0)
  • 2021-02-06 05:26
     public function behaviors() {
            return [
                [
                    'class' => BlameableBehavior::className(),
                ],
                [
                    'class' => TimestampBehavior::className(),
                    'value' => date('Y-m-d H:i:s')
                ],
            ];
        }
    
    0 讨论(0)
提交回复
热议问题