2012-07-04 48 views
1

用戶將喜歡的日期:2012年6月11日。Yii更新輸入字段的輸錯日期 - 在何處進行控制?

要插入我使用的數據庫:

protected function beforeSave() 
{ 
    if($this->date <> '') 
    { 
    list($d, $m, $y) = explode('/', $this->date); 
    $mk=mktime(0, 0, 0, $m, $d, $y); 
    $this->date = date ('Y-m-d', $mk); 
    } 

    return parent::beforeSave(); 
} 

問題1)是不是有一個較短的方法嗎?

無論如何,它的工作原理,所以我必須在字符串格式從數據庫日期型字段未來日期:

$date = '2012-11-06' 

然後我正確使用日期格式,我也得到了日,月

yii::app()->dateFormatter->format('dd', $date); 

yii::app()->dateFormatter->format('MMMM', $date); 

這一切似乎很好地工作。 然而,我更新形式,我得到這樣一個日期:

「20/12/1106」

在表單上輸入字段,日期應轉換爲:

顯示時
dd/mm/yyyy 

在我的模型規則這裏是我有:

array('date', 'type', 'type' => 'date', 'message' => '{attribute}: Invalid Date!', 'dateFormat' => 'dd/mm/yyyy'), 

我們在哪裏可以控制這個在Yii中,使我們對日期的輸入欄顯示爲DD/MM/YYYY?

我已經做到了這一點,但ofcourse如果我們以後還有別的控制器然後更新,我們必須改變這一點。這似乎不是一個好方法。 :(

protected function afterFind() 
{ 
if(Yii::app()->controller->action->id == 'update') 
{ 
    if($this->date <> '') 
    { 
    Yii::app()->dateFormatter->formatDatetime($this->date,'short'); 
    } 

    return parent::afterFind();   
} 
} 

回答

0

可以渲染更新表單前做一些鍛鍊。這應該工作,但在你的行動更新之前$this->render(....);

$model->date = assign your required format here; 

沒有測試 ,但如果你需要保持這個格式,你應該避免在每一個地方轉換日期,只是直接保存日期所需格式的數據庫。

+0

我一直在勸(所有在這個互聯網的文章),不保存在其他F上的日期ormat然後yyyy-mm-dd - 這是數據庫接受的格式,沒有大驚小怪。如果我們需要以不同的方式顯示它,我們會將其轉換爲應用程序日期或日期時間通常是這裏的字段。我會試一試。 3分鐘。 – MEM

+0

還有你說的是正確的,但我相信簡單的足夠的使用數據庫就不會拒絕值:)你可以設置varchar類型,這將成爲唯一的存儲和quries –

+0

我用一個afterFind這麼做可能無法幫助()。但我相信這種做法非常粗魯。你能檢查一下嗎? – MEM