【问题标题】:Yii2 kartik/date/datepicker shows wrong format while updateYii2 kartik/date/datepicker 在更新时显示错误的格式
【发布时间】:2021-12-06 19:19:39
【问题描述】:

我在我的 activeform 中使用 kartik DatePicker。

use kartik\date\DatePicker;

我的 activeform 字段:

    <?= $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);

当我更新时,它显示为

我需要这个

【问题讨论】:

    标签: php date datepicker yii2 active-form


    【解决方案1】:

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

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

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

      在配置文件下面添加

        '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');
    

    【讨论】:

    • 有用的一个!谢谢!
    【解决方案2】:

    你需要像这样格式化你的日期:

    'value' => $model->isNewRecord ? date('d-m-Y', strtotime('+2 days')) : date('d-m-Y', strtotime($model->transferred_date));
    

    【讨论】:

      【解决方案3】:

      好吧,我的朋友,您只需将活动表单中日期选择器小部件的格式更改为如下所示

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-07
        • 2017-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-31
        相关资源
        最近更新 更多