我从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致命错误:对第二行的非对象调用成员函数格式()”。知道我做错了吗?
答案 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 used。UTC
的行为与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');
这是未经测试的,只是说......