4

私はPHPが初めてで、PHPの日付と時刻についてもっと学ぼうとしていますが、これに行き詰まっているようです。

私はこの日付形式を持っています:

 ddMMyyHHmmss

例は 120813125055 ですが、次の形式になるように文字列を操作しようとしています。

 yyyy-MM-dd HH:mm:ss (in the example above, 2013-08-12 12:50:55)

私は次のようなことをしようとしました:

 date('Y-m-d H:i:s', strtotime('120813125055'));

しかし、常に 1969-12-31 18:00:00 という結果が得られます。

これにはPHPで文字列操作を行う必要があると思いますが、より簡単で効率的な方法があるかどうか疑問に思っていましたか?

4

4 に答える 4

4

date_create_from_formatを使用します。

$ts = date_create_from_format('dmyHis', '120813125055');
$str = date('Y-m-d H:i:s', $ts);

strtotime() は、簡単に認識できる形式でのみ機能します。あなたはゴミの醜い混合物なので、 strtotimeFALSEが失敗のためにブール値で保釈され、int 0それを に戻そうとすると型キャストされることは驚くことではありませんdate()

もちろん、時間文字列は y2k に準拠していないことに注意してください。2 桁の年は、表示目的以外では使用しないでください。

于 2013-08-12T15:40:40.700 に答える
4

あなたが探しているのは、ここで回答された 2 番目の応答にあると思います: how to re-format datetime string in php?

要約すると (そして例に適用すると)、次のようにコードを変更できます。

$datetime = "120813125055"; 
$d = DateTime::createFromFormat("dmyHis", $datetime);
echo $d->format("Y-m-d H:i:s");
于 2013-08-12T15:42:01.627 に答える
0

関数呼び出しと引数を間違った方法で使用しています。

あなたの例では、php は時間が 'strtotime('120813125055')' である日付を返そうとします。この関数は false を返します (0 として解釈されます)。したがって、Unix エポックの「Ymd H:i:s」でフォーマットされた日付が返されます。

文字列の実際のタイムスタンプを取得する必要があるため、http://www.php.net/manual/en/datetime.createfromformat.phpを使用してください。

于 2013-08-12T15:41:13.587 に答える