2013-08-03 73 views
0

我收到來自HTTP POST,其中包括什麼標記格林威治時間的一些數據:PHP - 轉換格林威治時間

<gmt_timestamp>201308031525</gmt_timestamp> 

然後我需要借這個時間戳並將其轉換爲這種格式:

MM/DD/YYYY HH:MM 

到目前爲止,我一直想這樣的:

$ts = $_GET['timestamp']; 
$date = DateTime::createFromFormat('ymdHi', $ts); 
$fmTimestamp = $date->format('m/d/Y h:i:s A'); 

而是生成一個「PHP致命錯誤:調用到membe r函數格式()在非對象上「的第二行。任何想法我做錯了什麼?

+0

,你會發現變量爲空。 'createFromFormat()'在給定輸入不正確時無法創建日期,因此返回null。 – Raptor

回答

1

你在這一行中的錯誤:

$date = DateTime::createFromFormat('ymdHi', $ts); 

你需要一個大寫Y年度:

$date = DateTime::createFromFormat('YmdHi', $ts); 

小寫y表示「每年的2位數字表示」,而您需要Y(「一年的全數字表示,4位數字」)。請參閱文檔here

您還需要設置時區開始之前:

date_default_timezone_set('UTC'); 

(PHP確實有GMT時區,但it shouldn't be usedUTC的行爲與內PHP GMT。)

編輯

爲了得到您想要的輸出格式:

MM/DD/YYYY HH:MM 

你需要做的:

$fmTimestamp = $date->format('m/d/Y H:i'); 

此外,由於你的 「從HTTP POST接收的一些數據」,你需要使用$_POST,而不是$_GET

$ts = $_POST['timestamp']; 

所以完整的代碼是:

date_default_timezone_set('UTC'); 
$ts = $_POST['timestamp']; 
$date = DateTime::createFromFormat('YmdHi', $ts); 
$fmTimestamp = $date->format('m/d/Y H:i'); 
-1

你沒有實例化對象喲你正在嘗試使用。

試試這個辦法來代替:

$date = new DateTime; 
$date->createFromFormat('ymdHi', $ts); 
$fmTimestamp = $date->format('m/d/Y h:i:s A'); 

這是未經測試,只是說...

+1

您不需要實例化DateTime對象,因爲'createFromFormat()'是一個靜態方法。 – TachyonVortex

0

保持簡單愚蠢。

$input = $_GET['timestamp']; // 201308031525 
$year = (int)substr($input,0,4); 
$month = (int)substr($input,4,2); 
$date = (int)substr($input,6,2); 
$hour = (int)substr($input,8,2); 
$minute = (int)substr($input,10); 

$date_obj = new DateTime($year . '-' . $month . '-' . $date .' ' . $hour . ':' . $minute); 
echo $date_obj->format('m/d/Y h:i:s A'); 

,輸出是:

08/03/2013 03:25:00 PM 
如果你調試`$ date`
+0

您是否在說額外的5行代碼提取日期和時間元素並將它們轉換爲「int」,並將所有這些元素連接在一起形成DateTime構造函數的字符串,這比「DateTime」更簡單:: createFromFormat('YmdHi',$ ts);'? – TachyonVortex

+0

只是另一種方法,放鬆。 – Raptor

相關問題