首页 > 解决方案 > Yii2 kartik/date/datepicker 在更新时显示错误的格式

问题描述

我在我的活动表单中使用 kartik DatePicker。

use kartik\date\DatePicker;

我的活动表单字段:

    <?= $form->field($model, 'transferred_date')->widget(DatePicker::className(), [
                        'value' => date('d-M-Y', strtotime('+2 days')),
                        'options' => ['placeholder' => 'Select date ...'],
                        'pluginOptions' => [
                            'format' => 'dd-mm-yyyy',
                            'todayHighlight' => true
                        ]
    ])->label('Transferred Date');
?>

创建时,我将其保存为 UTC 日期格式:

$model->transferred_date = new \MongoDB\BSON\UTCDateTime(strtotime($postModel['transferred_date'])*1000);

当我更新时,它显示为

在此处输入图像描述

我需要这个

在此处输入图像描述

标签: phpdatedatepickeryii2active-form

解决方案


您必须向小部件提供格式化的日期。

  • 使用时,ActiveForm您可以覆盖afterFind()特定模型以格式化日期并覆盖字段的默认时间戳值transferred_date

  • 对于格式化,你可以通过在配置文件中定义使用yii-i18n-formatter组件来common/config/main.php使用advanced-app,或者config/web.php使用basic-app.

    在配置文件下面添加

      'components'=>[
          'formatter' => [
              'dateFormat'=>'dd-MM-yyyy',
              'datetimeFormat' => 'yyyy-MM-dd HH:mm:ss',
          ],
      ]
    

    在您的模型中添加以下内容

      public function afterFind() {
          parent::afterFind();
          $this->transferred_date=Yii::$app->formatter->asDate($this->transferred_date);
      }
    

现在将字段定义更改为下面并刷新页面

<?php echo $form->field($model, 'transferred_date')->widget(DatePicker::class, [
    'options' => ['placeholder' => 'Select date ...'],
    'pluginOptions' => [
        'format' => 'dd-mm-yyyy',
        'todayHighlight' => true,
    ],
])->label('Transferred Date');

推荐阅读