2017-11-08 17 views
1

日付フォームをd/m/YからY-m-dにタイムゾーンオフセットで変換したい。createFromFormat私に間違った結果を与える

$date = DateTime::createFromFormat('d/m/Y', $date); 
$date = $date->format('Y-m-d'); 

これがある程度動作しますが、私はこれらのような日付に遭遇したとき:

echo DateTime::createFromFormat('d/m/Y h:m:s', '19/07/2017 00:00:00'); 
results is 2016-12-19 00:00:00.000000 
echo DateTime::createFromFormat('d/m/Y h:m:s', '20/07/2017 22:51:17'); 
results is false 

今すぐ を編集しました私はこのコードではYmdにD/M/Yから変換することができています推奨される形式を使用して

DateTime::createFromFormat('d/m/Y H:i:s', '19/07/2017 00:00:00'); 

期待される結果:

06/06/2017 00:00:00 => 2017-06-06 00:00:00.000000 
06/06/2017 12:31:34 => 2017-06-06 12:31:34.000000 
08/06/2017 21:59:21 => 2017-08-06 21:59:21.000000 
19/07/2017 00:00:00 => 2018-07-07 00:00:00.000000 wrong! 
20/07/2017 22:51:17 => 2018-08-07 22:51:17.000000 wrong! 
21/07/2017 23:39:23 => 2018-09-07 23:39:23.000000 wrong! 
27/07/2017 02:46:14 => 2019-03-07 02:46:14.000000 wrong! 
+0

これは 'd/m/Y H:i:s'でなければなりません。' 24hour'形式に 'H'を使用してください。 –

+0

今どこかに行ってもそれでも間違った結果を出すような気分です。例えば30/07/2017 00:00:00 2016-12-07 00:00:00.000000 – Photonic

+1

@Photonic:あなたは 'm '。Sahilは彼のコメントを編集しました。おそらくあなたはそれを見ませんでした。 – panther

答えて

1

代わりにHiを使用してください。また、代わりにオブジェクトprint_rをエコーすることはできません。 24時間形式の

Try with an example

H。先行ゼロミニッツ

変更し、このため

iへ:

echo DateTime::createFromFormat('d/m/Y h:m:s', '19/07/2017 00:00:00'); 

この:特定の形式を取得するための

print_r(DateTime::createFromFormat('d/m/Y H:i:s', '19/07/2017 00:00:00')); 

$dateObject=DateTime::createFromFormat('d/m/Y H:i:s', '19/07/2017 00:00:00'); 
echo $dateObject->format("Y-m-d H:i:s"); 
+0

一部の機能は23/08/2017 18:08:02 => 2018-11-08 18:08:02.000000 | 24/08/2017 22:42:56 => 2018-12-08 22:42:56.000000以上多く – Photonic

+0

@Photonicあなたの予想される形式を共有できますか?あなたは欲しい。 –

+0

d/m/Y H:i:s〜Y-m-d H:i:sは私の期待した結果です。とにかく、何年か、月、日のような結果が出ています。 – Photonic

0

なぜが、これはあなたにそれらの結果を与えている説明するために、この

$date = DateTime::createFromFormat('d/m/Y H:i:s', '20/07/2017 22:51:17'); 
echo date_format($date, 'Y-m-d H:i:s'); 
0

を試してください:

あなたの日付書式文字列は二回mが含まれている、第二は、「読んでいると時間の「分」の部分です。これは、前の正しい月の値を上書きしています。最初の文字列(19/07/2017 00:00:00)には分が0であるため、DateTimeオブジェクトは「0番目」の月に初期化されています。これにより、PHPでは前の年に1か月間ロールバックされるため、2016年12月に表示されます任意の数を解析するよりも高い12

としては、他の回答に正しいフォーマット文字列を説明するとき、これは失敗します - 。あなたは24時間の時間を解析するhを使用しているので、

あなたの2番目の文字列(20/07/2017 22:51:17)が失敗していますそれらの日付に使用するのはd/m/Y H:i:sです。

関連する問題