2012-02-16 9 views
6

Ho una forma, in cui il campo di input è come questoDatepicker in Yii è la memorizzazione dei dati come aa formato MM d

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

ho fatto Salva questa forma nel modello file.It è qualcosa di simile

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

CJuiDatePicker viene utilizzato per salvare i dati dal selettore di date. Sta visualizzando la data in formato d mm aa al momento del salvataggio, ma quando aggiornerò il modulo la data verrà mostrata nel formato MM di y. Se sto cambiando il dataformat di beforeSave(), sta memorizzando la data format in 0000-00-00 Valori.Nessun altro valore di data sta memorizzando. Qualcuno può dirmi dove sto sbagliando? Qualsiasi aiuto e suggerimento sarà altamente apprezzabile.

+0

Io non capisco che cosa si sta descrivendo. Può essere più preciso? – Jon

+0

Hai provato a scaricare il valore di $ this-> due_date dopo averlo modificato, prima che venga salvato? Scollegalo e controlla che il valore sia corretto lì. –

+0

@Jon, penso che stia dicendo che il campo data appare (popolato) nel formato AAAA-MM-GG quando tenta di aggiornare il modello. –

risposta

8

Prova questa:

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

aggiungere il codice qui sopra per il vostro modello. E dovrebbe funzionare.

+1

Fatemi sapere se è richiesto qualche chiarimento. –

+1

Grazie @ bool.dev.. Ha funzionato per me. – NewUser

+0

va tutto bene, ha funzionato, ricorda di chiamare i metodi 'padre', quando li stai sovrascrivendo, in modo che gli eventi vengano correttamente sollevati. anche il AfterFind ci aiuta a riformattare i dati nel modo che volevamo, ovviamente avresti potuto farlo nella vista stessa, ma ho pensato che fosse meglio. –

3

Ho avuto un problema simile con le date europee, formattate come: 'gg/mm/aaaa', e questo è quello che uso:

Nelle regole modello:

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

perche 'medium' il formato locale si adatta alle mie esigenze di convalida.

Nella forma che uso:

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

e la conversione di nuovo a disposizione di MySQL, per salvare, confronti data ...:

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

Spero che questo aiuti.

0

questo ha funzionato per me:

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