PHP - 转换GMT时间戳

时间:2013-08-03 14:47:09

标签: php timestamp

我从HTTP POST收到一些数据,其中包含标记为GMT时间戳的内容:

<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致命错误:对第二行的非对象调用成员函数格式()”。知道我做错了吗?

3 个答案:

答案 0 :(得分:1)

这行有一个错误:

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

您需要年度大写Y

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

小写y表示“一年的两位数表示”,而您需要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 :(得分: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

答案 2 :(得分:-1)

您没有实例化您尝试使用的对象。

请尝试使用此方法:

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

这是未经测试的,只是说......