2016-12-28 121 views
4

我有一個MySQL數據庫表,其列名爲"timestamp",類型爲timestamp,屬性爲on update CURRENT_TIMESTAMP,默認值爲CURRENT_TIMESTAMP如何將MySQL TIMESTAMP轉換爲PHP中的日期時間

如果我在表中添加一條記錄,指定其他值,但不是時間戳,那麼時間戳會自動添加,如2016-12-28 17:02:26

在PHP我使用下面的查詢

SELECT * FROM history WHERE user_id = 9 ORDER BY timestamp ASC 

查詢的結果被保存到$rows查詢表和我使用foreach與一些格式化其他值創建一個數組。我正試圖將時間戳格式化爲英國式的24小時日期時間:dd/mm/yy, HH:MM:SS

我試圖兩者date()strftime()功能如下:

$formatted_datetime = strftime("%d %m %y %H %M %S", $row["timestamp"]); 
$formatted_datetime = date("d/m/y, H:i:s", $row["timestamp"]); 

這兩個結果在以下通知和日期時間被輸出不正確地像01 01 70 00 33 36

說明:甲第20行中的/home/ubuntu/workspace/pset7/public/history.php中遇到的格式不正確的數字值

我是PHP和MySQL的新手,到目前爲止,我看到的其他問題或文檔都沒有成功解決執行此轉換問題。我不明白爲什麼strftime()無法正常工作,以及如何正確執行此操作?

+0

的可能的複製[轉換MySQL的時間戳爲實際的日期和時間?(http://stackoverflow.com/questions/5547252/convert-mysql-timestamp-into-actual-date-and-時間) – Tiger

+1

旁註:由於其限制,我不會使用'TIMESTAMP':*「TIMESTAMP數據類型用於包含日期和時間部分的值.TIMEESTAMP的範圍爲'1970-01-01 00:00 :01'UTC to **'2038-01-19 03:14:07'** UTC。「* https://dev.mysql.com/doc/refman/5.5/en/datetime.html使用'DATETIME' *「DATETIME類型用於包含日期和時間部分的值,MySQL以'YYYY-MM-DD HH:MM:SS'格式檢索並顯示DATETIME值。支持的範圍是'1000-01-01 00: 00:00'到**'9999-12-31 23:59:59'。**「* –

+0

@Tiger那裏所選的解決方案似乎...很多。我會受益於我桌子上時間戳列的不同類型嗎? – Toby

回答

4

要做到這一點的OO(和最靈活的)方式使用DateTime類,並使用靜態createFromFormat方法實例化一個新DateTime對象:

$new_datetime = DateTime::createFromFormat ("Y-m-d H:i:s", $row["timestamp"]); 

現在你可以使用$new_datetime對象通過調用對象的format方法生成任何字符串表示形式:

echo $new_datetime->format('d/m/y, H:i:s'); 

要啓動,您既然有了DateTime對象,那麼現在您也可以進行任何方式的轉換(如移動時區或添加天數),比較(大於或小於另一個DateTime)以及各種時間計算(多少天/幾個月/等...在這個和另一個DateTime之間)。

DateTime:http://php.net/manual/en/class.datetime.php 瞭解它。愛它。活着吧。

1

通常在MySQL日期時間戳中將時間保存爲YYYY-MM-DD HH:MM:SS (2016-12-20 18:36:14),您可以使用日期格式很容易地將它們轉換爲您的願望,但必須先將輸入轉換爲時間。下面會做的伎倆

$formatted_datetime = date("d/m/y, H:i:s", strtotime($row["timestamp"])); 
+0

不知道爲什麼這是downvoted,它可能不是OO的方式,strtotime將工作得很好爲MySQL時間戳。 – Devon

0

我會用Carbon class和字符串格式化

$carbon = Carbon::instance('2016-12-28 17:02:26'); 

然後,你可以格式化你想要的方式。

+2

重要提示:Carbon是PHP DateTime API的第三方擴展。 – Devon

+0

@Devon真實但非常有用。它是如此之好,它配備了Laravel – Samuel

+0

是的,我幾乎每天都在使用它。不知道爲什麼這是低調的,Carbon對於那些希望使用圖書館的人來說是一個很好的解決方案。 +1來恢復平衡。 – Devon

1

爲什麼不讓MySQL做這項工作?你真的想要mm/dd/yy,而不是dd/mm/yy嗎?

SELECT *, DATE_FORMAT(timestamp, '%m/%d/%y, %T') formatted_date FROM .... 

然後,您可以提取格式化的日期爲$ row ['formatted_date']。

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

+0

哎呀,你是對的,我想要dd/mm/yy,謝謝。我會編輯fothwith! – Toby

+0

我有seens DATE_FORMAT()提到,但只涉及'SELECT DATE_FORMAT ...',並不知道如何適應它,我會試一試 – Toby

+0

這有效,我喜歡它的整潔,但我認爲Ray的DateTime對象方法更靈活一點。 – Toby