03-20-2010 などの特定の形式で日付を作成したいのですが、mdY の形式がありますが、日付関数はこの日付を認識せず、間違った日付を返します
$date = date("Y-m-d", strtotime("03-20-2010"));
上記のコードは間違った日付を返していますが、その背後にある理由と間違った結果を回避する方法を教えてください。日付関数に認識させたい形式は、 "Y/m/d" 、 "m/d/Y" 、 "F d, Y" 、 "M d, Y" です。
03-20-2010 などの特定の形式で日付を作成したいのですが、mdY の形式がありますが、日付関数はこの日付を認識せず、間違った日付を返します
$date = date("Y-m-d", strtotime("03-20-2010"));
上記のコードは間違った日付を返していますが、その背後にある理由と間違った結果を回避する方法を教えてください。日付関数に認識させたい形式は、 "Y/m/d" 、 "m/d/Y" 、 "F d, Y" 、 "M d, Y" です。
おかしなことに、質問のタイトルには問題の正確な解決策が含まれています。
を使用しDateTime::createFromFormat
ます。(注:PHP> = 5.3が必要です)
予想される日付の正確な形式を指定できるため、strtotime()
あいまいさや英米の偏見はありません。
これは機能するはずです:
$date = DateTime::createFromFormat("Y-m-d", "2010-03-20");
strtotimeは、「-」で区切られたアメリカンスタイルの順序を認識しませんが、「/」区切り文字を使用すると、問題なく機能します。
$date = date("Y-m-d", strtotime(str_replace('-', '/', "03-20-2010")));
Pekkaが指摘しているように、コードで使用している形式を明示的に宣言する方がよいでしょう。
mktimeでタイムスタンプを取得し、そのタイムスタンプを使用できます
$exact_time = "03-20-2010";
$exploded_et = explode("-",$exact_time);
$date = date("Y-m-d",mktime(0,0,0,$exploded_et[0],$exploded_et[1],$exploded_et[2]));