私はこれまでにこれに出くわしたことがないとは信じられません。
基本的に、人間が作成したテキスト ドキュメントのテキストを解析しています。解析する必要があるフィールドの 1 つは日付と時刻です。私はオーストラリアにいるので、日付は次のようにフォーマットされていますが、米国でフォーマットされた日付として解析したいだけですdd/mm/yyyy。strtotimeまた、/前述したように、これらのドキュメントは手書きであり、一部のドキュメントはd M yy.
複数の組み合わせを試しましsetlocaleたが、何を試しても、言語は常に米国英語に設定されています。
ここで setlocale が重要であることは間違いありませんが、適切なコードを見つけることができないようです。これらを試しました:
- au
- アウエン
- en_AU
- オーストラリア
- aus
他に試せることはありますか?
明確にするために:私はWindowsボックスを備えたIISで実行しています。
本当にありがとう :)
イアン
例:
$mydatetime = strtotime("9/02/10 2.00PM");
echo date('j F Y H:i', $mydatetime);
プロデュース
2 September 2010 14:00
私はそれを生成したい:
9 February 2010 14:00
私の解決策
私にとってははるかに読みやすい解決策であるため、ここで回答の1つにチェックマークを付けていますが、ここに私が思いついたものがあります:
$DateTime = "9/02/10 2.00PM";
$USDateTime = preg_replace('%([0-3]?[0-9]{1})\s*?[\./ ]\s*?((?:1[0-2])|0?[0-9])\s*?[./ ]\s*?(\d{4}|\d{2})%', '${2}/${1}/${3}', $DateTime);
echo date('j F Y H:i',strtotime($USDateTime));
ユーザーが入力した日付と一貫性があるとは限りませんので、正規表現をもう少し複雑にしました。
- 0 または 0 ~ 3 の 1 桁
- 0 から 9 までの 1 桁 -- はい、これは有効な日付として 37 に一致しますが、正規表現はすでに十分に大きいと思います!
- 空白の可能性があります
- 区切り文字 (「.」、「/」、または「 」)
- 空白の可能性があります
- また:
- 10 から 12 の間の数値または
- オプションで先頭に 0 を付けた 1 から 9 までの数値
- 空白の可能性があります
- 区切り文字 (「.」、「/」、または「 」)
- 空白の可能性があります
- また:
- 2 桁の数字 OR
- 4 桁の数字
うまくいけば、これは日付の書き方のほとんどのスタイルと一致します...