2

次の形式の日付文字列がありますd/m/y22/02/13

この文字列をエコーし​​たいのですY-m-dが、次のコードを使用すると、機能しません。

$d = '22/02/13';
echo date('Y-m-d', strtotime($d));

出力:1970-01-01

私は何が間違っているのですか?これを/区切り文字として展開して手動で実行する必要がありますか、それともよりシンプルでエレガントなソリューションがありますか?

4

7 に答える 7

5

DateTimeを使用します。

$datetime = DateTime::createFromFormat('d/m/y', '22/02/13');
echo $datetime->format('Y-m-d');

実際に見てください

参照

于 2013-02-22T16:34:12.010 に答える
4

マニュアルから:

ノート:

m / d / yまたはdmy形式の日付は、さまざまなコンポーネント間のセパレーターを調べることで明確になります。セパレーターがスラッシュ(/)の場合、アメリカのm / d/yが想定されます。一方、区切り文字がダッシュ(-)またはドット(。)の場合、ヨーロッパのdmy形式が想定されます。

あいまいさの可能性を回避するために、可能な場合はISO 8601(YYYY-MM-DD)の日付またはDateTime :: createFromFormat()を使用することをお勧めします。

tl; dr:スラッシュを使用すると、am / d/yのクレイジーなアメリカンスタイルの日付になります。

最も簡単な回避策は、DateTimeクラスを使用して独自の形式を作成することです。

$date= DateTime::createFromFormat('d/m/y', '21/11/13');
echo $date->format('Y-m-d');
于 2013-02-22T16:34:36.123 に答える
4

を使用/すると、PHPは日付(mm/dd/yy)のアメリカンスタイルのフォーマットを使用していると見なすため、必要な出力をダッシュ​​に置き換えます。

$d = str_replace('/', '-', '22/02/13');
echo date('Y-m-d', strtotime($d));
于 2013-02-22T16:35:50.953 に答える
0

見る

DateTime::createFromFormat(...)

これにより、正しいDateTime値が作成されます。

于 2013-02-22T16:35:32.953 に答える
0

より簡単な方法:

$d = '22.02.13';
echo date('Y-m-d', strtotime($d));

サルドス ;)

于 2013-02-22T16:39:17.320 に答える
0

このため

「注: m/d/y または dmy 形式の日付は、さまざまな構成要素間の区切り記号を調べることで明確になります。区切り記号がスラッシュ (/) の場合、アメリカの m/d/y が想定されます。一方、区切り文字がダッシュ (-) またはドット (.) の場合、ヨーロッパの dmy 形式が想定されます。潜在的なあいまいさを避けるために、可能であれば ISO 8601 (YYYY-MM-DD) 日付または DateTime::createFromFormat() を使用することをお勧めします."

http://php.net/strtotime

于 2015-03-07T19:30:06.123 に答える