0

MySQL (mm/dd/yyyy -> yyyy-mm-dd) に「フィード」できるように日付を変換したい場合、この preg_match は正常に動作します

$new_date = preg_replace("!([01][0-9])/([0-9]{2})/([0-9]{4})!", "$3-$1-$2", $data[$c]);

のような日付で

04/02/2012, 12/31/2012

しかし、次のような入力を取得すると失敗します

12/1/2011, 1/4/2011

私は正規表現に完全に慣れていないため、それを修正する方法... :(

どうもありがとうございました。

4

4 に答える 4

1

試す:

!([01]?[0-9])/([0-9]{1,2})/([0-9]{4})!

2 番目のグループの{1,2}は、0 ~ 9 の 1 桁または 2 桁を意味します。また、最初の部分で 1 桁または 2 桁を受け入れるようにしたので、2012 年 3 月 12 日と 2012 年 3 月 12 日を一致させることができます。

于 2012-11-16T00:28:01.813 に答える
1

試す:

!(\d{1,2})/(\d{1,2})/(\d{4})!

\dは数字を意味し、 よりも便利だと思います[0-9]。ほぼ同等です。

于 2012-11-16T00:29:53.837 に答える
0

試す:

$date = date("Y-m-d", strtotime($input));

strtotimeは、ほぼすべての形式で機能します。

于 2012-11-16T00:34:47.673 に答える
0

日付を操作してから正規表現を使用する方が簡単です。DateTimeオブジェクトを使用すると、これが簡単になります。

$date = new DateTime('1/1/2013');
$new_date = $date->format('Y-m-d'); // Outputs 2013-01-01
于 2012-11-16T00:28:24.920 に答える