2015-11-05 3 views
0

Я хочу отобразить выбор даты в Yii и получить дату в формате «ГГГГ-ММ-ДД», чтобы я мог сохранить в своей БД. Я использовал следующий код, но он дает дату в формате «MM/DD/YYYY», который выдает ошибку при сохранении в базе данных, поскольку это не дата.Изменить формат даты для Yii dateField

Посмотреть код:

<div class="row"> 
    <?php echo $form->labelEx($model,'datecreated'); ?> 
    <?php echo $form->dateField($model,'datecreated'); ?> 

    <?php echo $form->error($model,'datecreated'); ?> 
</div> 

модальный код:

<?php 

public function tableName() 
{ 
    return 'admin'; 
} 

public function rules() 
{ 

    return array(
     array('datecreated', 'type', 'type' => 'date', 'message' => '{attribute}: is not a date!','dateFormat'=>'YYYY-MM-DD'), 
     array('datecreated','safe', 'on'=>'search'), 
    ); 
} 

public function attributeLabels() 
{ 
    return array(
     'datecreated' => 'Birthdate', 
    ); 
} 

public function search() 
{ 

    $criteria=new CDbCriteria; 
    $criteria->compare('datecreated',$this->datecreated,true); 

    return new CActiveDataProvider($this, array(
     'criteria'=>$criteria, 
    )); 
} 
?> 

ответ

1

Вы можете использовать beforeSave функцию в вашей модели:

protected function beforeSave() 
{ 
    // convert when storing in db 
    $this->datecreated = date('Y-m-d', strtotime($this->datecreated)); 

    return parent::beforeSave(); 
} 

И если вы хотите, чтобы отобразить дату в мм/dd/yyyy, тогда используйте функцию afterFind в вашей модели:

protected function afterFind() 
{ 
    // convert the date back to mm/dd/yyyy format while viewing 
    $this->datecreated = date('m/d/Y', strtotime($this->datecreated)); 

    parent::afterFind(); 
} 

Или, вы можете преобразовать формат даты в контроллере, прежде чем $model->save();:

public function actionCreate() 
{ 
    $model = new Admin(); 
    if(isset($_POST['Admin'])) 
    { 
     $model->attributes=$_POST['Admin']; 
     $model->datecreated = date('Y-m-d', strtotime($model->datecreated)); 
     ...... 
     $model->save(); 
     ...... 
    } 
    ...... 
} 
0

Также вы можете использовать CJuiDatePicker виджет:

$this->widget('zii.widgets.jui.CJuiDatePicker', array(
    'model'=>$model, 
    'attribute'=>'datecreated', 
    // jQuery datepicker plugin options 
    'options' => array(
     'showAnim' => 'fold', 
     'dateFormat'=>'yyyy-mm-dd', 
    ), 
    'htmlOptions' => array(
    ), 
)); 

Также вы можете добавить правило проверки, используя CDateValidator:

public function rules() 
{ 

    return array(
     array('datecreated', 'date', 'format' => 'yyyy-MM-dd', 'allowEmpty' => false), 
     array('datecreated','safe', 'on'=>'search'), 
    ); 
} 

Спасибо.

Смежные вопросы