2016-05-11 157 views
0

我無法獲取我的時間戳來格式化我的喜好。我已經嘗試了一切。用日期和時間編碼任何東西都會擾亂我的大腦。在我的報告表中,數據庫'timestamp'中的列給我返回像2016-05-09 13:41:13的結果。 我試圖讓它像這樣格式化。 05-09-2016 1:41:13 PM。無法獲取格式的時間戳

我的查詢是這樣的。

$query = "SELECT DATE_ADD(timestamp, INTERVAL 3 HOUR), timestamp, marketer, facility, name, type, phone, email, fax, description, locality, state, zip, latlng FROM leads WHERE marketer = 'Emily' 
ORDER BY DATE_ADD(timestamp, INTERVAL 3 HOUR) DESC"; 

表結果就像這樣:

while($row = mysqli_fetch_assoc($result)) { 
echo "<tr>"; 

echo "<td>" . $row['DATE_ADD(timestamp, INTERVAL 3 HOUR)'] . "</td><td>" . $row['marketer'] . "</td><td>" . $row['facility'] . "</td><td>" . $row['name'] . "</td><td>" . $row['type'] . "</td><td>" . $row['phone'] . "</td><td>" . $row['email'] . "</td><td>" . $row['fax'] . "</td><td>" . $row['description'] . "</td><td>" . $row['locality'] . "</td><td>" . $row['state'] . "</td><td>" . $row['zip'] . "</td><td>" . $row['latlng'] . "</td>"; 
echo "</tr>"; 

我讀過的多個論壇和文獻上這一點,但需要保持3+小時的間隔,以及這是我正在進入的問題。

UPDATE 我沒有得到正確的時間格式,但現在不會有ORDER BY。

$query = "SELECT DATE_FORMAT(timestamp + INTERVAL 3 HOUR, '%m-%d-%Y %r') AS formatted_ts, marketer, facility, name, type, phone, email, fax, description, locality, state, zip, latlng FROM leads WHERE marketer = 'Emily' ORDER BY DATE_FORMAT(formatted_ts + INTERVAL 3 HOUR, '%m-%d-%Y %r') AS formatted_ts, DESC";

當查詢沒有結果顯示。當我拿出訂單時,它顯示正確的格式。

+0

您是否試過[date_format()](http://www.w3schools.com/sql/func_date_format.asp)? – paulsm4

+0

這是我目前的問題,我正在努力與哪裏或如何添加,並仍然保持3+的時間間隔?謝謝@ paulsm4 –

+0

那麼真正的問題在哪裏?以格式或區間?數據表上的格式爲 –

回答

0

首先,具有類似於'DATE_ADD(timestamp, INTERVAL 3 HOUR)'一個PHP數組密鑰,即使它的工作原理,是不是很有可讀性,所以不是我建議在查詢走樣它的東西更明智的:

$query = "SELECT DATE_ADD(timestamp, INTERVAL 3 HOUR) as future_date, timestamp, marketer, facility, name, type, phone, email, fax, description, locality, state, zip, latlng FROM leads WHERE marketer = 'Emily' 
ORDER BY DATE_ADD(timestamp, INTERVAL 3 HOUR) DESC"; 

要格式化如何像,只需使用PHP DateTime類:

while($row = mysqli_fetch_assoc($result)) { 
    $future_date = new DateTime($row['future_date']); 
    echo $future_date->format('m-d-Y g:i:sA'); 
} 
0

MySQL提供了功能DATE_FORMAT

參考:http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format

2016-05-09 13:41:13。我試圖讓它像這樣格式化。 05-09-2016 1:41:13 PM。

例如

SELECT ... 
     , timestamp 
     , DATE_FORMAT(timestamp + INTERVAL 3 HOUR, '%m-%d-%Y %r') AS formatted_ts 
     , ... 
    FROM ... 

我認爲%r可能會返回一個兩位數的小時(前導零)。要獲得單個數字,您可能需要指定%l:%i:%s%p代替%r

MySQL參考手冊(上面的鏈接)給出了可以在格式字符串中使用的說明符的完整列表。

此外,爲表達式分配別名將爲您提供一個更簡單的列名稱,以便從結果集中引用。

$row['formatted_ts']