2012-02-16 16 views
6

としてデータを記憶している私は、入力フィールドがこの日付ピッカーはYY 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> 

のようなものです私はモデルfile.Itにこのフォームセーブされていた形態は、この

ようなものである必要があり
protected function beforeSave() 
    { 
    $this->due_date=date('Y-m-d', strtotime(str_replace(",", "", $this->due_date))); 
    return TRUE; 
    } 

CJuiDatePickerは、日付ピッカーからのデータの保存に使用されます。保存時の日付をdmm yy形式で表示していますが、日付をyy MM d形式で表示するフォームを更新するときに使用します。beforeSave()のdateformatを変更している場合は、日付0000-00-00の値でフォーマットします。他の日付の値は格納されていません。私が間違っているところを教えてくれる人もいますか?どんな助けや提案も非常に魅力的です。

+0

を私は非常にあなたが記述しているものを理解していません。あなたはもっと具体的になりますか? – Jon

+0

$ this-> due_dateのvalieを変更した後、保存する前にダンプしようとしましたか?ログアウトし、値が正しいことを確認します。 –

+0

@ジョン、私は彼がモデルを更新しようとすると、日付フィールドがYYYY-MM-DD形式で表示されていると言っていると思います。 –

答えて

8

これを試してみてください:

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

は、あなたのモデルに上記のコードを追加します。そしてそれはうまくいくはずです。

+1

明確化が必要な場合は教えてください。 –

+1

ありがとう@ bool.dev ..それは私のために働いた。 – NewUser

+0

うれしいことにうれしいことですが、あなたがそれらを上書きしているときに 'parent'メソッドを呼び出すことを忘れないでください。 afterFindは、私たちが望むようにデータを再フォーマットするのに役立ちます。明らかに、ビュー自体でそれを行うことができましたが、これはより良いと思いました。 –

3

私は次のようにフォーマットされたヨーロッパの日付と同様の問題、持っていた: 'DD/MM/YYYY' を、そしてこれは私が使用するものです:モデル規則で

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

これは私の仕事:

public function beforeSave() 
{ 
    $this->due_date = date('Y-m-d', strtotime($this->due_date)); 
    return parent::beforeSave(); 
} 
関連する問題