2016-05-19 13 views
1

私は英字形式からYYYY-MM-DDに日付をフォーマットしようとしています。PHP - 日付書式設定の問題

echo "<br>".$_GET['trans_date']; 
echo "<br>".$_GET['next_payment']; 
echo "<br>".$_GET['payment_date']; 
echo "<br><br>".date("Y-m-d", strtotime($_GET['trans_date'])); 
echo "<br>".date("Y-m-d", strtotime($_GET['next_payment'])); 
echo "<br>".date("Y-m-d", strtotime($_GET['payment_date'])); 

そして、私は次のような結果を得る:

私が使用していたコードがある

19/05/2016 
01/06/2016 
19/05/2016 

1970-01-01 
2016-01-06 
1970-01-01 

私は次のような結果を期待しています:

19/05/2016 
01/06/2016 
19/05/2016 

2016-05-19 
2016-01-01 
2016-05-19 

は、誰もが何が起こっていることができますが違う?

おかげで、

+0

):PHPが 'xx/xx/xxxx'構造の日付で'/'を見つけたら、それをUS書式(' mm/dd/yyyy')として扱います.... '/'を ' 'を使用する前に' strtotime() 'を使用するか、[DateTime :: createFromFormat()](http://nl3.php.net/manual/en/datetime.createfromformat.php)を使用してDateTimeオブジェクトを作成してください –

+0

strtotime関数は、英語の日付形式(mm/dd/yyyy)を含む文字列を指定してください –

答えて

1

ジョンこれは動作するはずです:

echo "<br><br>".date("Y-m-d", strtotime(str_replace('/', '-', $_GET['trans_date']))); 
echo "<br>".date("Y-m-d", strtotime(str_replace('/', '-', $_GET['next_payment']))); 
echo "<br>".date("Y-m-d", strtotime(str_replace('/', '-', $_GET['payment_date']))); 
+0

すばらしい、ありがとう! –

1

はちょうどあなたが05/19/2016に日付を指定されたセットmm/dd/yy形式を意味し、それが修正されます。

2

実際にstrtotimeのロケールを設定することはできません。

あなたがアメリカ人なら、2010年11月12日を参照し、「2010年11月12日」と考えてください。

オーストラリア(またはヨーロッパ)のお客様は、「2010年12月11日」と思われます。

あなたがISOで読むシステム管理者の場合、「2011年12月10日」のように見えます。

これを補う最良の方法は、結合文字を変更することです。 ダッシュ( - )はヨーロッパD-M-Yを表し、ピリオド(。)はピリオド(。)はISO Y.M.Dを表します。

私の提案は、不必要なエラーを避けるためにDateTimeオブジェクトを日付に使用することです。あなたの質問に来る

Ex: $date = DateTime::createFromFormat('j-M-Y', '15-Feb-2009'); 
echo $date->format('Y-m-d'); 

、解決策は次のとおりです。[PHPのドキュメント](http://www.php.net/manual/en/datetime.formats.date.phpあたりとして

$trans_date = DateTime::createFromFormat('d/m/Y', $_GET['trans_date']); 
$next_payment_date = DateTime::createFromFormat('d/m/Y', $_GET['next_payment']); 
$payment_date = DateTime::createFromFormat('d/m/Y', $_GET['payment_date']); 

echo "<br><br>".$trans_date->format('Y-m-d'); 
echo "<br>".$next_payment_date->format('Y-m-d'); 
echo "<br>".$payment_date->format('Y-m-d');