2016-04-04 12 views
0

書き込み:PHPののstrtotime()4月の略語(4月)では動作しません

00:00:00 
00:00:00 

をしかし、実際には取得::私が期待する

echo date('H:i:s', strtotime('Mar-29-2016')) . "<br />"; 
echo date('H:i:s', strtotime('Apr-3-2016')); 

が取得する

00:00:00 
16:16:00 

変更先:

echo date('H:i:s', strtotime('March 29 2016')) . "<br />"; 
echo date('H:i:s', strtotime('April 3 2016')); 

ワークス出力することによって、期待通り:

00:00:00 
00:00:00 

のstrtotimeについて()私は理解していませんか?

+1

このエコー・デート( 'H:i:s'、strtotime( 'Apr-03-2016')); '? –

+0

先頭に0を追加すると正しく動作します。なぜstrtotime()はタイムスタンプを付けないのですか? – Verl

+1

[M-D-Y形式を使用している場合](https://eval.in/547545)は正しく動作します。そのフォーマットを使用してください。 PHPの日付と時刻の関数はすべて、UNIXのタイムスタンプや日付のアメリカ式のいずれかを中心に回転する傾向があります。 MM-DD-YYYY - "any format"からunix timestampへの魔法の変換には欠陥があり、それらを検索するとStackOverflowに大きく書かれています。 –

答えて

1

試してみてください。

echo date('H:i:s', strtotime('Apr-03-2016')); 

のstrtotime関数は英語の日付形式を含む文字列を与えられるし、Unixタイムスタンプにそのフォーマットを解析しようと予測しています。

0

Apr-3-2016は有効な日付形式ではありません。 php docs

Month abbreviation, day and year M "-" DD "-" y "May-09-78", "Apr-17-1790" 
1

「4月 - 3から2016」から、有効なPHPの化合物の日付/時刻文字列ではありません。文字列をstrtotime()が認識できるものに変換します。例えば、「3・4月・2016」へのあなたの「4月 - 3から2016」の形式を変換するには

echo date('r', strtotime('Apr-3-2016')) . "\n"; 
echo date('r', strtotime('3-Apr-2016')) . "\n"; 
echo date('r', strtotime('2016-04-03')) . "\n"; 
echo date('r', strtotime('4/3/2016')) . "\n"; 

Sun, 03 Apr 2016 16:16:00 -0400 
Sun, 03 Apr 2016 00:00:00 -0400 
Sun, 03 Apr 2016 00:00:00 -0400 
Sun, 03 Apr 2016 00:00:00 -0400 

例えば、いくつかの他のオプションに(あなたの文字列)、以下の最初の結果を比較します
$date = "Apr-3-2016"; 
list($m, $d, $y) = explode("-", $date); 
$newdate = join("-", array($d, $m, $y)); 
関連する問題