2

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" です。

4

3 に答える 3

23

おかしなことに、質問のタイトルには問題の正確な解決策が含まれています。

を使用しDateTime::createFromFormatます。(注:PHP> = 5.3が必要です)

予想される日付の正確な形式を指定できるため、strtotime()あいまいさや英米の偏見はありません。

これは機能するはずです:

$date = DateTime::createFromFormat("Y-m-d", "2010-03-20");
于 2010-08-22T16:04:32.087 に答える
5

strtotimeは、「-」で区切られたアメリカンスタイルの順序を認識しませんが、「/」区切り文字を使用すると、問題なく機能します。

$date = date("Y-m-d", strtotime(str_replace('-', '/', "03-20-2010")));

Pekkaが指摘しているように、コードで使用している形式を明示的に宣言する方がよいでしょう。

于 2010-08-22T16:06:26.873 に答える
1

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]));
于 2010-08-22T16:10:21.367 に答える