2011-08-16 22 views
1

我在想,如果我通過javascript函數記錄的時間,說我離開它2分鐘20秒:形式值00:00:00到時間價值

00.02.20 

現在,當我插入此到我的數據庫,其中字段類型設置爲時間,它不正確記錄。

我認爲它來自我如何請求數據:

$length = mysql_escape_string($_REQUEST['timeDrive']); 

有轉換到這一點是要輸出的精確值的時間的一種方式:

00.02.20 

感謝幫助!

回答

2

如果你不需要在這些字段上執行任何數學函數(例如:總和,平均等),並且純粹用於顯示,那麼您可以將它作爲純文本存儲在CHAR(8)字段中。

否則,您需要將其歸一化爲某種單位。我建議也許是秒數的整數(如果這對你來說足夠準確)。

要轉換到秒:

$val = "00.02.20"; 
$parts = explode(".", $val); // ['00', '02', '20'] 
$totalSeconds = parts[0] * 3600 + parts[1] * 60 + parts[2]; // 140 

而且將其轉換回:

$seconds = 140; // this would be read from the database, or something 

printf("%02d.%02d.%02d", 
    $seconds/3600, 
    ($seconds/60) % 60, 
    $seconds % 60 
); 
+0

我很喜歡你,但我真的需要將它插入到數據庫中,因爲它正在寫入(00:02:20),因爲我正在對現有時間值執行一些sum()函數。 –

2

不,不僅僅是這樣。

這將是可能的,如果你讓它更簡單,你只需要計算javascript中的秒數。在您的數據庫中,您可以將其保存爲整數或其他內容。

另一種方法是將它保存爲字符串,但不能比較時間。

好吧,我把它保存爲一個整數,如果你想顯示的時間給別人,你會之前格式化,像這樣:

function formatTime($seconds) { 
    $hours = floor($seconds/3600);  //by nickf 
    $minutes = floor($seconds/60) % 60; 
    $sec = $seconds % 60; 
    $retHr = (strlen($hours) == 1 ? "0" . $hours : $minutes); 
    $retMin = (strlen($minutes) == 1 ? "0" . $minutes : $minutes); 
    $retsec = (strlen($sec) == 1 ? "0" . $sec : $sec); 
    return $retHr . "." . $retMin . "." . $retsec; 
} 

//now you counted one hour, two minutes and three seconds, you call it like 
echo formatTime(3723); 
//... and it outputs "01.02.03" 
+0

地獄,你說的沒錯....嗯,我會只是改變它,感謝提示。 ..我現在是一個新手兩年:P –

+0

好吧,所以我只是有點困惑,以什麼發生在我請求的時間字符串...它被改變爲不同的數字,然後插入?如果是這樣,我如何將它作爲它在(00:02:20) –

+0

中記錄的格式表示回網站上。您不請求時間字符串,而是請求秒數的整數。在記錄它的網站上,只需計算生成這種格式的秒數即可。 如果你確實要求你的時間是一個字符串,那麼你應該把它作爲一個字符串保存在你的數據庫中,這只是最簡單的方法。 –