0

ユーザーに日付を入力させるユーザーフォームがあります。ユーザーの入力をタイムスタンプに変換する関数があります。ただし、扱えるフォーマットはmm/dd/yyyy. では、これらのいずれかを変換するにはどうすればよいですか。

m/dd/yyyy, 
m/d/yyyy, 
mm/d/yyyy 
with any separator might that be 
(/,\,-,space)

私の関数の受け入れられたマスク、つまりmm/dd/yyyyに?

最初に、文字列が私の説明と一致するかどうかを確認しようとしました:

preg_match_all("[0-9]{0,2}/[0-9]{0,2}/[0-9]{4}", $string,$matches);

しかし、私が得るのはエラーだけです

(未知の修飾子 "}"),

誰が何が悪いのか知っていますか?正規表現を使用するのは初めてです。

4

4 に答える 4

2

正規表現区切り文字を使用していないため、エラーが発生しています。

そのはず:

preg_match_all("#[0-9]{0,2}/[0-9]{0,2}/[0-9]{4}#", $string,$matches);

もちろん、これは元の問題を解決するものではありませんが、、、、など/の選択した区切り文字で正規表現を使用する必要があることを伝えているだけです。#~|

ヒント:さまざまな形式で日付を解析するには、strototime PHP 関数を調べます。

于 2013-05-20T16:56:41.193 に答える
2

これに正規表現を使用する必要はありません (実際にはもっと手間がかかります)。代わりに、PHP の組み込みの日付/時刻関数を使用してください。

strtotime: 文字列の日付 (事実上すべての形式) を Unix タイムスタンプに変換します。

date: タイムスタンプを人間が読める日付にフォーマットします

$user_date;             #the user-supplied date, any format
$format = 'm/d/Y';      #your desired date format, in this case MM/DD/YYYY

#convert the date to your format
$formatted_date = date($format, strtotime($user_date));

または、DateTimeオブジェクトでこれを行うことができます。与えられ$user_date$format上記から:

$user_date_obj = new DateTime($user_date);
$formatted_date = $user_date_obj->format($format);

また

$formatted_date = date_format(date_create($user_date), $format);

..

つまり、質問に答えるには、正規表現を区切るだけです。スラッシュは機能しますが、正規表現内でリテラル スラッシュを照合しているため、バー/パイプなど、別のものを使用する方が簡単です。

preg_match_all("|[0-9]{0,2}/[0-9]{0,2}/[0-9]{4}|", $string, $matches);

そうすれば、スラッシュ リテラルをエスケープする必要がなくなります。

ちなみに、この正規表現を次のように短縮することもできます。

"|(\d{0,2}/){2}\d{4}|"

\dは と同じで、 の 2 つのオカレンスをに[0-9]組み合わせることができます。ただし、これを読むのが難しいと感じる人もいるかもしれません。\d{0,2}/(\d{0,2}/){2}

于 2013-05-20T16:57:10.880 に答える
1

私は正規表現があなたがこれをやりたいと思っている方法ではないと思います。次のように PHP の DateTime オブジェクトを使用してみてください。

$objDate = new DateTime($strDate);
$strNewDate = $objDate->format('m/d/Y');
于 2013-05-20T16:59:03.250 に答える