web-dev-qa-db-ja.com

Locale :: getDefault()を考慮したDateTimeオブジェクトのフォーマット

現在フォーマットしているDateTimeオブジェクトがあります

$mytime->format("D d.m.Y")

これにより、必要な形式が正確に得られます。

火5.3.2012

唯一の欠けている点は正しい言語です。 TueTuesday)のドイツ語翻訳が必要です。これはDieDienstag)です。

これにより、適切なロケール設定が得られます

Locale::getDefault()

しかし、私はDateTime::format使用します。

次のようなことをする方法はありませんか?

$mytime->format("D d.m.Y", \Locale::getDefault());
57
stoefln

formatはロケールに注意を払っていないためです。代わりに strftime を使用する必要があります。

例えば:

setlocale(LC_TIME, "de_DE"); //only necessary if the locale isn't already set
$formatted_time = strftime("%a %e.%l.%Y", $mytime->getTimestamp())
57
Jonathan

Intl 拡張機能を使用して、日付をフォーマットできます。選択したロケールに従って日付/時刻をフォーマットします。または、 IntlDateFormatter::setPattern() でオーバーライドできます。

目的の出力形式にカスタムパターンを使用した簡単な例は、次のようになります。

$dt = new DateTime;

$formatter = new IntlDateFormatter('de_DE', IntlDateFormatter::SHORT, IntlDateFormatter::SHORT);
$formatter->setPattern('E d.M.yyyy');

echo $formatter->format($dt);

次のものを出力します(少なくとも今日は)。

ディ4.6.2013


Edit:ああブー!古代の質問に答えたのは、いくつかのコメントがリストに盛り上がったからです!少なくともIntlオプションについては今言及されています。

110
salathe