私は、テキスト文字列とdate()に与えられた書式指定子を取り、時、分、刻みを含む配列に解析しようとするいくつかのコード(wordpressプラグインの一部です)秒、日、月、年。PHPでローカライズされた日付文字列を解析する
現在、私は、これは実際にはかなりうまく機能
// $format contains the string originally given to date(), and $content is the rendered string
if (function_exists('date_parse_from_format')) {
$content_parsed = date_parse_from_format($format, $content);
} else {
$content = preg_replace("([0-9]st|nd|rd|th)","\\1",$content);
$content_parsed = strptime($content, dateFormatToStrftime($format));
$content_parsed['hour']=$content_parsed['tm_hour'];
$content_parsed['minute']=$content_parsed['tm_min'];
$content_parsed['day']=$content_parsed['tm_mday'];
$content_parsed['month']=$content_parsed['tm_mon'] + 1;
$content_parsed['year']=$content_parsed['tm_year'] + 1900;
}
、そして私が投げてきたすべての組み合わせを扱うように思われる(つまりのstrtotimeが01/02/03のようなものと恐ろしく信頼できないことに注意)次のコードを使用しますそれで。
しかし、最近誰かが私に24 Ноябрь, 2010
を与えました。これは2010年11月24日のロシア語です(日付形式はj F, Y
)、それは年= 2010、月= null、日= 24として解析されます。
翻訳方法を知っている機能はありますか11月と11月の両方にНоябрь?
EDIT:print_r(setlocale(LC_ALL, 0));
戻りC
を実行
。 strptime()
に戻って切り替えると、問題を解決するようだが、ドキュメントが警告:
内部的には、この関数は、システムのCライブラリで提供のstrptime()関数を呼び出します。この機能は、異なるオペレーティングシステム間で顕著に異なる動作を示す可能性があります。これらの問題に悩まされていないdate_parse_from_format()の使用は、PHP 5.3.0以降で推奨されています。
date_parse_from_format()
正しいAPIですか、そうなら、どのようにして言語を認識させるのですか?
問題は、他のユーザーが使用する可能性のあるプラグインだということです。「適切な」ソリューションを見つけることはうれしいでしょう。しかし、私はそれが動作していない場合を見つけるまで私は 'strptime()'に固執すると思います... – Mikeage
@Mikeage UnitTestは適切です:) 'date_create_from_format'がローカライズされた文字列を解析できるかどうか試してみてください。私はそれがないと思うが、それにもかかわらず試してみてください。 – Gordon
私は18 Mag 2013(= 2013-05-18)のように、イタリアの日付を解析するためにstrptime()とdate_create_from_formatの両方を試してみました。 – damko