2012-11-10 39 views
1

我無法通過模型在數據庫中保存日期。在我的控制器中,如果我將從日誌中獲得的日期轉儲到$ _POST,我會以「10/Nov/2012 07:30」格式獲取日期。如果我使用:Yii:在DB中保存日期和時間

$AccountAppointment->start_date=Yii::app()->dateFormatter->format($_POST['AccountAppointment']['start_date'], 'dd/M/yyyy HH:mm'); 

我得到的錯誤:

Invalid datetime format: 1292 Incorrect datetime value: '10/NoGMT+5/2012 07:30' for column 'start_date' 

在dateFormatter更改格式爲 'DD/M/YYYY HH:MM' 或 'DD/MM/YYYY HH:MM'或'dd/MMM/yyyy HH:mm'會引發相同的錯誤。

Db是MySQL 5.0,Yii 1.1.12版本。

任何幫助將不勝感激,我幾乎被卡住....謝謝....

回答

0

我已經使用在過去這樣的事情。我用CDateTimeParser解析日期,然後按照你想要的方式進行格式化。

echo Yii::app()->dateFormatter->formatDateTime(
    CDateTimeParser::parse($classified->create_date, 'yyyy-MM-dd' 
),'medium',null); 

我想你可以這樣做:

echo Yii::app()->dateFormatter->formatDateTime(
    CDateTimeParser::parse($classified->create_date, 'dd/MMM/yyyy HH:mm' 
),'full',null); 

echo Yii::app()->formatter->datetime(
    CDateTimeParser::parse($classified->create_date, 'dd/MMM/yyyy HH:mm') 
); 
+0

添感謝您的反饋意見。不幸的是,你所建議的選項都沒有工作。在浪費了將近一天之後,我繼續創建自己的方法將日期轉換爲所需的格式。我已經把我的解決方案作爲答案,以便可以幫助其他人。不管怎麼說,還是要謝謝你。 – FaisalKhan

0

您正在使用的格式不正確。 「Nov」對應的模式爲MMM,而不是M(這是一個整數,沒有任何前導零)。

+0

我嘗試了所有選項,在我的問題中也提到過,請在問題中的錯誤語句後面看到文本。 – FaisalKhan

0

我找不到任何轉換將dd/MMM/yyyy HH:mm日期格式轉換爲MySQL,因此創建了我自己的方法。這只是一個解決方法,只要我想出一個更優雅的解決方案,我會更新我的答案。下面是我創建的方法:

public function returnDate($inputDate){ 
    //Input format of date is : dd/MMM/yyyy HH:mm, example: 02/Feb/2012 18:20. The method converts the format to YYYY-MM-DD H:i which is compliant to MySQL 5.0 or above. 
    $retval=''; 
    $dd=substr($inputDate, 0,2); 
    $mm=substr($inputDate, 3,3); 
    $yy=substr($inputDate,7,4); 
    $tt=substr($inputDate,12,5); 
    $month=0; 
    switch($mm){ 
     case "Jan": 
      $month='01'; 
      break; 
     case "Feb": 
      $month='02'; 
      break; 
     case "Mar": 
      $month='03'; 
      break; 
     case "Apr": 
      $month='04'; 
      break; 
     case "May": 
      $month='05'; 
      break; 
     case "Jun": 
      $month='06'; 
      break; 
     case "Jul": 
      $month='07'; 
      break; 
     case "Aug": 
      $month='08'; 
      break; 
     case "Sep": 
      $month='09'; 
      break; 
     case "Oct": 
      $month='10'; 
      break; 
     case "Nov": 
      $month='11'; 
      break; 
     case "Dec": 
      $month='12'; 
      break; 
    } 
    $retval=$yy.'-'.$month.'-'.$dd.' '.$tt; 
    return $retval; 
} 
0

更改您的日期選擇器的格式,默認情況下它是YY-MM-DD

0

我想你不明白的格式化功能。請看下面。

/** 
* Formats a date according to a customized pattern. 
* @param string $pattern the pattern (See {@link http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns}) 
* @param mixed $time UNIX timestamp or a string in strtotime format 
* @return string formatted date time. Null if $time is null. (the null value check is available since Yii 1.1.11) 
*/ 
public function format($pattern,$time){ 
---------------------- 
} 

您需要切換日期格式和時間。 這是正確的:

$AccountAppointment->start_date=Yii::app()->dateFormatter->format('dd/MM/yyyy HH:mm' ,$_POST['AccountAppointment']['start_date']); 

希望我可以幫助別人:)