2012-06-22 41 views
0

在我的UI中,日期顯示如下 - dd.mm.YYYY hh:ii:ss。用戶可以編輯/添加新日期,並且很可能他們會嘗試使用不能用於SQL查詢的相同格式(24.06.2012 15:35:00)。這裏是我做了什麼至今:PHP/MySQL - 以正確的格式準備插入日期時間SQL列的字符串

$dt = (date_parse_from_format("d.m.Y H:i:s", $data['event_time'])); 
     $newdate = sprintf("%02d-%02d-%04d %02d:%02d:%02d" , $dt['day'], $dt['month'], $dt['year'], $dt['hour'], $dt['minute'], $dt['second']); 
     $test = date("Y-m-d H:i:s", strtotime($newdate)); 
     if ($test == "1970-01-01 01:00:00") 
     { 
      throw new Exception('Invalid date'); 
     } 

會發生什麼事是 - 如果我離開檢查if ($test == "1970-01-01 01:00:00")我得到一個異常,但如果我評論了$test = date("Y-m-d H:i:s", strtotime($newdate));線和檢查日期僅插入零。 $newdate是SQL - YYYY-mm-dd H:i:s正確的格式,但obv。我想念這裏的東西。如何將此字符串作爲有效的SQL日期時間插入?

感謝

Leron

+1

對不起,「yyyy-MM-dd HH:mm:ss」用於.Net。對於PHP,「Y-m-d H:i:s」是正確的。嘗試打印strtotime(#newdate)並查看值。 –

+0

你在哪裏插入日期?嘗試在每一步打印日期以確保您的觀察結果。 – manurajhada

回答

2

DateTime類是PHP 5.2引入,將允許您使用這樣的

$dt = DateTime::createFromFormat("d.m.Y H:i:s", $data['event_time']); 
if($dt === false){ 
    throw new Exception("Invalid date"); 
} 

DateTime::createFromFormat失敗時返回假(此方法只因爲可用PHP 5.3)

然後,當保存到數據庫時,您可以使用以下命令獲取正確的f ORMAT爲MySQL

$dt->format("Y-m-d H:i:s") 
+0

對不起,這是我在OOP不是很好,但我嘗試'$ dt = DateTime :: createFromFormat(「dmY H:i:s」,$ data ['event_time']);'然後直接插入'$ dt'到我的數據庫,它會返回此錯誤:類DateTime的對象無法轉換爲字符串可能是問題? – Leron

+0

在查詢中用'$ dt->格式(「Y-m-d H:i:s」)替換'$ dt'。格式方法以參數 – acqu13sce

+0

傳遞的格式返回日期的字符串版本並且我使用'$ dt-> format..',但是然後我得到沒有錯誤並且沒有新記錄。 – Leron

0

MySQL提供的FROM_UNIXTIME()和UNIX_TIMESTAMP()函數來Unix時間戳轉換爲一個MySQL日期格式,並且反之亦然。

$SqlString = "INSERT INTO table(mydate, content) VALUES (FROM_UNIXTIME($mydate), $content)"; 

UNIX_TIMESTAMP,如果稱爲不帶參數,返回一個Unix時間戳(秒因爲 '1970-01-01 00:00:00' UTC)作爲無符號整數。如果使用date參數調用UNIX_TIMESTAMP(),則它會返回自1970年1月1日「1970-01-01 00:00:00」以來秒數的值。日期可以是DATE字符串,DATETIME字符串,TIMESTAMP或格式爲YYMMDD或YYYYMMDD的 中的數字。

$SqlString = "SELECT *, UNIX_TIMESTAMP($mydate) AS mydate FROM table WHERE conId = $conId"; 

深入瞭解這些MySql函數以及mktime()函數可以幫助您。

相關問題