IntlDateFormatter::create
datefmt_create
IntlDateFormatter::__construct
(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)
IntlDateFormatter::create -- datefmt_create -- IntlDateFormatter::__construct — Date Formatter を作成する
説明
オブジェクト指向型
?string
$locale
,int
$dateType
= IntlDateFormatter::FULL,int
$timeType
= IntlDateFormatter::FULL,IntlTimeZone|DateTimeZone|string|null
$timezone
= null
,IntlCalendar|int|null
$calendar
= null
,?string
$pattern
= null
): ?IntlDateFormatter
オブジェクト指向型 (コンストラクタ)
?string
$locale
,int
$dateType
= IntlDateFormatter::FULL,int
$timeType
= IntlDateFormatter::FULL,IntlTimeZone|DateTimeZone|string|null
$timezone
= null
,IntlCalendar|int|null
$calendar
= null
,?string
$pattern
= null
)
手続き型
?string
$locale
,int
$dateType
= IntlDateFormatter::FULL,int
$timeType
= IntlDateFormatter::FULL,IntlTimeZone|DateTimeZone|string|null
$timezone
= null
,IntlCalendar|int|null
$calendar
= null
,?string
$pattern
= null
): ?IntlDateFormatter
Date Formatter を作成します。
パラメータ
locale
-
フォーマットやパースの際に使用するロケール。
null
を指定すると、 ini 設定 intl.default_locale の値を使います。 dateType
-
使用する日付の形式。 IntlDateFormatter の定数 のいずれかです。 デフォルト値は
IntlDateFormatter::FULL
です。 timeType
-
使用する時刻の形式。 IntlDateFormatter の定数 のいずれかです。 デフォルト値は
IntlDateFormatter::FULL
です。 timezone
-
タイムゾーン ID。デフォルト (そして、
null
が渡されたときにも使われるもの) は date_default_timezone_get() が返す ID、あるいはcalendar
パラメータに IntlCalendar オブジェクトが渡されていればそのタイムゾーンを使います。 この ID は、ICU のデータベースにある妥当な識別子である必要があります。あるいは、 オフセットを明示したGMT-05:30
のような形式になります。IntlTimeZone オブジェクトあるいは DateTimeZone オブジェクトも指定できます。
calendar
-
フォーマットやパースの際に使用するカレンダー。デフォルトは
null
で、 これはIntlDateFormatter::GREGORIAN
を表します。 IntlDateFormatter のカレンダー定数 あるいは IntlCalendar を指定します。 渡された IntlCalendar は、クローンされます。 IntlDateFormatter によって元のオブジェクトが書き換えられることはありません。 これは、利用するカレンダーの型 (グレゴリオ暦、イスラム暦、ペルシア暦など) の判定に使います。 また、timezone
パラメータにnull
を指定した場合にはタイムゾーンの判定にも使います。 pattern
-
フォーマットやパースの際に使用するオプションのパターン。 使えるパターンについては » https://unicode-org.github.io/icu/userguide/format_parse/datetime/ を参照ください。
戻り値
作成された IntlDateFormatter を返します。失敗した場合は null
を返します。
変更履歴
バージョン | 説明 |
---|---|
8.1.0 |
|
例
例1 datefmt_create() の例
<?php
$fmt = datefmt_create( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles', IntlDateFormatter::GREGORIAN );
echo "First Formatted output is ".datefmt_format( $fmt , 0);
$fmt = datefmt_create( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN );
echo "Second Formatted output is ".datefmt_format( $fmt , 0);
$fmt = datefmt_create( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN ,"MM/dd/yyyy");
echo "First Formatted output with pattern is ".datefmt_format( $fmt , 0);
$fmt = datefmt_create( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN ,"MM/dd/yyyy");
echo "Second Formatted output with pattern is ".datefmt_format( $fmt , 0);
?>
例2 オブジェクト指向の例
<?php
$fmt = new IntlDateFormatter( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN );
echo "First Formatted output is ".$fmt->format(0);
$fmt = new IntlDateFormatter( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN );
echo "Second Formatted output is ".$fmt->format(0);
$fmt = new IntlDateFormatter( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN ,"MM/dd/yyyy");
echo "First Formatted output with pattern is ".$fmt->format(0);
$fmt = new IntlDateFormatter( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN , "MM/dd/yyyy");
echo "Second Formatted output with pattern is ".$fmt->format(0);
?>
例3 無効なロケールを処理する例
<?php
try {
$fmt = new IntlDateFormatter(
'invalid_locale',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'dunno',
IntlDateFormatter::GREGORIAN,
);
} catch (\Error $e) {
// ...
}
?>
上の例の出力は以下となります。
First Formatted output is Wednesday, December 31, 1969 4:00:00 PM PT Second Formatted output is Mittwoch, 31. Dezember 1969 16:00 Uhr GMT-08:00 First Formatted output with pattern is 12/31/1969 Second Formatted output with pattern is 12/31/1969
参考
- datefmt_format() - 日付/時刻 の値を文字列としてフォーマットする
- datefmt_parse() - 文字列をパースしてタイムスタンプにする
- datefmt_get_error_code() - 直近の操作のエラーコードを取得する
- datefmt_get_error_message() - 直近の操作のエラーテキストを取得する
User Contributed Notes 5 notes
It should be noted that the locale string passed into IntlDateFormatter's constructor supports UCA keywords. So you can, for example, do things like this to output the year as a Japanese era year:
<?php
$now = new DateTime(); //DateTime is a core PHP class as of version 5.2.0
$formatter = new IntlDateFormatter('ja_JP', IntlDateFormatter::FULL,
IntlDateFormatter::FULL, 'Asia/Tokyo', IntlDateFormatter::GREGORIAN);
echo 'It is now: "' . $formatter->format($now) . '" in Tokyo' . "\n";
//above gives [It is now: "2011年8月19日金曜日 23時32分27秒JST" in Tokyo]
$formatter = new IntlDateFormatter('ja_JP@calendar=japanese', IntlDateFormatter::FULL,
IntlDateFormatter::FULL, 'Asia/Tokyo', IntlDateFormatter::TRADITIONAL);
echo 'It is now: "' . $formatter->format($now) . '" in Tokyo' . "\n";
//above gives [It is now: "平成23年8月19日金曜日 23時32分27秒JST" in Tokyo]
?>
Documentation says "timezone: Time zone ID, default is system default."
The "system default" really means only the "TZ" environment variable on Unix/Linux systems. It does not mean PHP ini setting or value set via date_default_timezone_set() or the OS default time zone in file "/etc/timezone".
The $locale can although contain the information about the calendar
<?php
//...
$traditionalFormatter = new IntlDateFormatter(
$locale.'@calendar='.$calendar,
IntlDateFormatter::SHORT,
IntlDateFormatter::SHORT,
'Europe/Berlin',
IntlDateFormatter::TRADITIONAL,
'yyyy/MM/dd HH:mm:ss' // ICU-datetime-format
);
//..
?>
To get the allowed values for $calendar, use the following code:
<?php
$bundle=new ResourceBundle('','ICUDATA');
$cnames=[];
$calendars=$bundle->get('calendar');
foreach($calendars as $n=>$v){
$cnames[]=$n;
}
echo (print_r($cnames,true));
?>
The result is:
Array
(
[0] => buddhist
[1] => chinese
[2] => coptic
[3] => dangi
[4] => default
[5] => ethiopic
[6] => ethiopic-amete-alem
[7] => gregorian
[8] => hebrew
[9] => indian
[10] => islamic
[11] => islamic-civil
[12] => japanese
[13] => persian
[14] => roc
)
The documentation says that $datetype and $timetype can also be NULL, in which case ICUʼs default date type or time type will be used.
But when declare (strict_types=1); is also set, Intl fails to create the IntlDateFormatter class, and it returns an error "datefmt_create: unable to parse input parameters".
Just to be clear, to use any non-gregorian calendar:
a. The locale must be in the form of locale@calendar=calendar-name
b. The calendar must use the intlDateFormatter::TRADITIONAL constant, or an intlCalendar object created with a locale as specified in a.
The calendar name can be 'gregorian', even if the intlDateFormatter::TRADITIONAL constant is used, which makes for a more generic code approach.