0

我从 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 致命错误:在非对象上调用成员函数 format()”。知道我做错了什么吗?

4

3 回答 3

1

您在这一行中有一个错误:

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

你需要一个大写Y的年份:

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

小写y表示“一年的两位数表示”,而您需要Y(“一年的完整数字表示,4 位”)。请参阅此处的文档。

您还需要在开始之前设置时区:

date_default_timezone_set('UTC');

(PHP 确实有一个GMT时区,但不应该使用它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');
于 2013-08-03T14:53:17.817 回答
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
于 2013-08-03T15:04:58.607 回答
-1

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

试试这种方法:

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

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

于 2013-08-03T14:54:21.023 回答