0

GMT タイムスタンプとラベル付けされたものを含む HTTP POST からいくつかのデータを受信して​​います。

<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');

しかし、それは2行目に「PHP Fatal error: Call to a member function format() on the non-object」を生成します。私が間違っていることは何か分かりますか?

4

3 に答える 3

1

この行にバグがあります:

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

Y年には大文字が必要です。

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

小文字yは「年を 2 桁で表す」ことを示しますが、必要なのは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 に答える