サーバーには既に Intl をインストールしています。
default_timezone
ヨーロッパ/イスタンブールとtr_TR に変更intl.default_locale
しました。
私はまだ英語で日付の名前を取得しています。
私は何が欠けていますか?
他の設定を変更する必要がありますか?
を使用することをお勧めしIntlDateFormatter
ます。これは PHP のintl
モジュールで利用可能であり、この質問のタイトルから判断すると、この拡張機能は利用可能です。
サンプル/大まかな実装:
$locale = 'tr_TR'; // a canonicalized locale
$format = 'MMM e'; // ISO format codes, not the typical date ones
$dt = new DateTime(); // a DateTime object
$df = new IntlDateFormatter(
$locale, // string locale
IntlDateFormatter::NONE, // int date type
IntlDateFormatter::NONE, // int time type
'UTC', // string timezone
IntlDateFormatter::GREGORIAN, // int cal type
$format // string pattern
);
var_dump($dt->format('c')); // string '2014-06-25T08:22:48-07:00' (length=25)
var_dump($df->format($dt)); // string 'Haz 3' (length=5)
何よりもまず、任意の Intl* クラスを使用すると有益です。これは、または を使用して PHP のランタイム ロケールを常にリセットする必要がないためです (これにより、IMO が煩雑になる可能性がありますsetlocale
) Locale::setDefault
。これにより、非常に構造化された方法で、さまざまなロケールで簡単に出力/フォーマットできます。また、PHP5 の新しい OOPness の使用を推進しています。これ以上のdate
ナンセンスは必要ありませんDateTime
。今すぐ使用する必要があります。
IntlDateFormatter コンストラクターには、次のようにかなり長い署名があります。
$locale
- 正規化されたロケール。選択したロケールをLocale::canonicalize
.$dateType
- これを 'none' (int) に設定し、最大限の柔軟性を得るため-1
にフォーマット パラメーター ( ) を使用します。$pattern
「ショート」、「ミディアム」、「ロング」、「フル」も受け入れます。詳細については、ICU プロジェクトのドキュメントを参照してください。$timeType
- と同じ$dateType
ですが、代わりに時間を扱います。$timezone
- これはのインスタンスではなくDateTimeZone
、文字列のタイムゾーンです。PHP のDate
クラスは intl のクラスと互換性がありません (メソッドなどの特定の組み込みアダプターは例外ですIntlDateFormatter::format
)。$calendar
- 通常はグレゴリオ暦 ( null
) ですが、 のインスタンスも受け入れることができますIntlCalendar
。$pattern
date
- 使用する解析/レンダリング形式。これはの最初のパラメーターに相当すると考えてください。ただし、それらは同じではありません。ICU (このクラスが使用する下位ライブラリ) は、Zend Framework docsで十分に文書化されている ISO 形式を採用しています。たとえば'Y'
、4 桁の年を使用する代わりに、 を使用します'yyyy'
。ISO 形式は、PHP よりもはるかに堅牢です。のインスタンスとIntlDateFormatter
オブジェクトDateTime
を取得したら、2 つを結合して、 を使用して、指定されたロケールで必要な日付/時刻を含む文字列を指定された形式 (以前に定義したとおり) でレンダリングできますIntlDateFormatter::format
。format
メソッドは単一の引数を受け入れます: のインスタンス--DateTime
簡単です!
$instanceOfIntlDateFormatter->format($instanceOfDateTime);
おまけとして、このformat
メソッドは (タイプの) さまざまなオブジェクトを取ることができmixed
ます。引用:
フォーマットする値。これは、
DateTime
オブジェクト、IntlCalendar
オブジェクト、エポックからの (場合によっては分数の) 秒数を表す数値型、または によって出力される形式の配列の場合がありますlocaltime()
。
timezone パラメータに関する注意:DateTime
バージョン PHP 5.5.0 で変更されました。回避策として以下を使用しました(詳細を思い出せないので、自分で解決してください)...
$timezoneForIntl = $instanceOfDateTime->getTimezone();
if ( version_compare(PHP_VERSION,'5.5.0','<') ) {
$timezoneForIntl = $timezoneForIntl->getName();
}