2013-08-03 53 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

相关问题