Datepicker в Yii хранит данные в формате yy MM d - PullRequest
6 голосов
/ 16 февраля 2012

У меня есть форма, в которой поле ввода выглядит следующим образом

  <div class="row">
  <?php echo $form->labelEx($model,'due_date'); ?>
  <?php 
    $this->widget('zii.widgets.jui.CJuiDatePicker',
      array(
            'attribute'=>'due_date',
            'model'=>$model,
            'options' => array(
                              'mode'=>'focus',
                              'dateFormat'=>'d MM, yy',
                              'showAnim' => 'slideDown',
                              ),
    'htmlOptions'=>array('size'=>30,'class'=>'date'),
          )
    );
  ?>
  <?php echo $form->error($model,'due_date'); ?>
  </div> 

Я сделал сохранить эту форму в файле модели. Это что-то вроде этого

    protected function beforeSave()
  {
    $this->due_date=date('Y-m-d', strtotime(str_replace(",", "", $this->due_date)));
    return TRUE;
  }

CJuiDatePicker используется для сохранения данных из палитры дат. На момент сохранения отображается дата в формате d мм гг, но когда я собираюсь обновить форму, дата отображается в формате гг м мм. формат в значениях 0000-00-00. Другие значения даты не хранятся. Может кто-нибудь сказать мне, где я делаю неправильно? Любая помощь и предложения будут очень полезны.

Ответы [ 4 ]

8 голосов
/ 16 февраля 2012

Попробуйте:

protected function afterFind(){
    parent::afterFind();
    $this->due_date=date('d F, Y', strtotime(str_replace("-", "", $this->due_date)));       
}

protected function beforeSave(){
    if(parent::beforeSave()){
        $this->due_date=date('Y-m-d', strtotime(str_replace(",", "", $this->due_date)));
        return TRUE;
    }
    else return false;
}

Добавьте приведенный выше код к вашей модели.И это должно работать.

3 голосов
/ 16 февраля 2012

У меня была похожая проблема с европейскими датами, отформатированными как «дд / мм / гггг», и вот что я использую:

В правилах модели:

    public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        array('date','date','format'=>Yii::app()->locale->getDateFormat('medium')),

потому что «средний» формат локали соответствует моим требованиям к валидации.

В форме, которую я использую:

            <?php echo $form->labelEx($model,'date'); ?>
            <?php
            $this->widget('zii.widgets.jui.CJuiDatePicker', array(
                //'name'=>'date',
                'model'=>$model,
                'attribute'=>'date',
                'language'=>Yii::app()->language=='es' ? 'es' : null,
                'options'=>array(
                    'changeMonth'=>'true', 
                    'changeYear'=>'true',   
                    'yearRange' => '-99:+2',        
                    'showAnim'=>'fold', // 'show' (the default), 'slideDown', 'fadeIn', 'fold'
                    'showOn'=>'button', // 'focus', 'button', 'both'
                    'dateFormat'=>'dd/mm/yy',
                    'value'=>date('dd/mm/yy'),
                    'theme'=>'redmond',
                    'buttonText'=>Yii::t('ui','Select form calendar'), 
                    'buttonImage'=>Yii::app()->request->baseUrl.'/images/calendar.gif', 
                    'buttonImageOnly'=>true,
                ),
                'htmlOptions'=>array(
                    'style'=>'vertical-align:top',
                    'class'=>'span2',
                ),  
            ));?>
            <?php echo $form->error($model,'date'); ?>

И преобразование обратно в формат MySQL, для сохранения, сравнения дат ...:

$date=strftime('%Y-%m-%d', strtotime(str_replace("/", "-", $this->date)));

Надеюсь, это поможет.

0 голосов
/ 07 марта 2019
<?= $form->field($model, 'As_purchaseDate')->widget(
    'trntv\yii\datetime\DateTimeWidget',
    [
        'phpDatetimeFormat' => 'yyyy-MM-dd',
        'clientOptions' => [
            'minDate' => new \yii\web\JsExpression('new Date("01-01-1996")'),
            'allowInputToggle' => false,
            'sideBySide' => true,
            'widgetPositioning' => [
               'horizontal' => 'auto',
               'vertical' => 'auto'

            ]
        ]
    ]);?>
0 голосов
/ 25 июня 2013

это сработало для меня:

public function beforeSave()
{
    $this->due_date = date('Y-m-d', strtotime( $this->due_date));
    return parent::beforeSave();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...