2012-02-16 11 views
6

Tengo un formulario, en el que el campo de entrada es como estoselector de fechas en Yii es el almacenamiento de datos mientras que el formato de d mm aa

<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> 

he hecho Guardar esta forma en el modelo file.It es algo como esto

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

CJuiDatePicker se utiliza para guardar los datos del selector de Fecha. Está mostrando la fecha en formato dmm aa en el momento de guardar, pero cuando voy a actualizar el formulario, la fecha se muestra en formato aa MM d. Si estoy cambiando el formato de fecha de beforeSave(), está almacenando la fecha format in 0000-00-00 values.No se almacenan otros valores de fecha. ¿Puede alguien decirme dónde estoy haciendo mal? Cualquier ayuda y sugerencia será altamente apreciable.

+0

No entiendo exactamente lo que usted está describiendo. ¿Puedes ser mas específico? – Jon

+0

¿Intentó volcar el valor de $ this-> due_date después de cambiarlo, antes de que se guarde? Desconéctelo y verifique que el valor sea correcto allí. –

+0

@Jon, creo que está diciendo que el campo de fecha aparece (rellenado) en el formato AAAA-MM-DD cuando intenta actualizar el modelo. –

Respuesta

8

Prueba esto:

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; 
} 

Añadir el código anterior para su modelo. Y debería funcionar.

+1

Avíseme si se requiere alguna aclaración. –

+1

Gracias @ bool.dev..Fue útil para mí. – NewUser

+0

bien, me alegro de que funcionó, recuerde llamar a los métodos 'padre', cuando los esté anulando, para que los eventos se generen correctamente. también el afterFind nos ayuda a reformatear los datos de la manera que queríamos, obviamente podrías haberlo hecho en la vista en sí, pero pensé que esto era mejor. –

3

que tenía un problema similar con fechas europeas, formateados como: 'dd/mm/aaaa', y esto es lo que uso:

En reglas modelo:

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

porque 'medio' el formato local se ajusta a mis necesidades de validación.

En la forma que utilizo:

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

y la conversión al formato de MySQL, para guardar, comparaciones de fecha ...:

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

Espero que esto ayude.

0

Esto funcionó para mí:

public function beforeSave() 
{ 
    $this->due_date = date('Y-m-d', strtotime($this->due_date)); 
    return parent::beforeSave(); 
} 
Cuestiones relacionadas