2012-02-16 24 views
6

Tôi có một hình thức, trong đó lĩnh vực đầu vào là như thế nàydatepicker trong Yii được lưu trữ dữ liệu như d định dạng MM yy

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

Tôi đã thực hiện tiết kiệm hình thức này trong mô hình file.It là một cái gì đó giống như

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

CJuiDatePicker được sử dụng để lưu dữ liệu từ bộ chọn ngày. Nó hiển thị ngày theo định dạng dmm yy tại thời điểm lưu nhưng khi tôi sẽ cập nhật biểu mẫu ngày hiển thị theo định dạng ddy yy.If tôi thay đổi dateformat của beforeSave(), nó sẽ lưu trữ ngày tháng định dạng trong các giá trị 0000-00-00.Không có giá trị ngày nào khác được lưu trữ. Một số người có thể cho tôi biết tôi đang làm sai ở đâu không? Bất kỳ trợ giúp và đề xuất nào đều sẽ có tính ứng dụng cao.

+0

tôi không hoàn toàn hiểu những gì bạn đang mô tả. Bạn có thể cụ thể hơn không? – Jon

+0

Bạn đã cố gắng đổ valie của $ this-> due_date sau khi bạn thay đổi nó, trước khi nó được lưu? Đăng xuất và kiểm tra xem giá trị có đúng không. –

+0

@Jon, tôi nghĩ anh ấy nói rằng trường ngày xuất hiện (được điền) ở định dạng YYYY-MM-DD khi anh ấy cố gắng cập nhật mô hình. –

Trả lời

8

Hãy thử điều này:

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

Thêm mã ở trên để mô hình của bạn. Và nó sẽ hoạt động.

+1

Hãy cho tôi biết nếu cần làm rõ. –

+1

Cảm ơn @ bool.dev..Đã làm việc cho tôi. – NewUser

+0

alright vui vì nó đã hoạt động, hãy nhớ gọi các phương thức 'parent', khi bạn ghi đè chúng, để các sự kiện được nâng lên đúng cách. cũng afterFind giúp chúng tôi định dạng lại dữ liệu theo cách chúng tôi muốn, rõ ràng là bạn có thể thực hiện điều đó trong chính chế độ xem, nhưng tôi nghĩ điều này là tốt hơn. –

3

Tôi đã có một vấn đề tương tự với các ngày châu Âu, được định dạng như: 'dd/mm/yyyy', và đây là những gì tôi sử dụng:

Trong quy tắc mô hình:

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

vì 'vừa' định dạng địa phương phù hợp với nhu cầu xác thực của tôi.

Trong hình thức tôi sử dụng:

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

Và việc chuyển đổi ngược về định dạng MySQL, cho tiết kiệm, so sánh ngày ...:

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

Hope this helps.

0

này làm việc cho tôi:

public function beforeSave() 
{ 
    $this->due_date = date('Y-m-d', strtotime($this->due_date)); 
    return parent::beforeSave(); 
} 
Các vấn đề liên quan