IntlDateFormatter::create
datefmt_create
IntlDateFormatter::__construct
(PHP 5 >= 5.3.0, PECL intl >= 1.0.0)
IntlDateFormatter::create -- datefmt_create -- IntlDateFormatter::__construct — Create a date formatter
Description
Object oriented style
$locale
, int $datetype
, int $timetype
[, mixed $timezone
= NULL
[, mixed $calendar
= NULL
[, string $pattern
= ""
]]] )Object oriented style (constructor)
$locale
, int $datetype
, int $timetype
[, mixed $timezone
= NULL
[, mixed $calendar
= NULL
[, string $pattern
= ""
]]] )Procedural style
$locale
, int $datetype
, int $timetype
[, mixed $timezone
= NULL
[, mixed $calendar
= NULL
[, string $pattern
= ""
]]] )Create a date formatter.
Parameters
-
locale
-
Locale to use when formatting or parsing or
NULL
to use the value specified in the ini setting intl.default_locale. -
datetype
-
Date type to use (
none
,short
,medium
,long
,full
). This is one of the IntlDateFormatter constants. It can also beNULL
, in which case ICUʼs default date type will be used. -
timetype
-
Time type to use (
none
,short
,medium
,long
,full
). This is one of the IntlDateFormatter constants. It can also beNULL
, in which case ICUʼs default time type will be used. -
timezone
-
Time zone ID. The default (and the one used if
NULL
is given) is the one returned by date_default_timezone_get() or, if applicable, that of the IntlCalendar object passed for thecalendar
parameter. This ID must be a valid identifier on ICUʼs database or an ID representing an explicit offset, such as GMT-05:30.This can also be an IntlTimeZone or a DateTimeZone object.
-
calendar
-
Calendar to use for formatting or parsing. The default value is
NULL
, which corresponds toIntlDateFormatter::GREGORIAN
. This can either be one of the IntlDateFormatter calendar constants or an IntlCalendar. Any IntlCalendar object passed will be clone; it will not be changed by the IntlDateFormatter. This will determine the calendar type used (gregorian, islamic, persian, etc.) and, ifNULL
is given for thetimezone
parameter, also the timezone used. -
pattern
-
Optional pattern to use when formatting or parsing. Possible patterns are documented at » http://userguide.icu-project.org/formatparse/datetime.
Return Values
The created IntlDateFormatter or FALSE
in case of
failure.
Changelog
Version | Description |
---|---|
5.5.0/PECL 3.0.0 |
An IntlCalendar object is allowed for
Objects of type IntlTimeZone and
DateTimeZone are allowed for
Invalid timezone identifiers (including empty strings) are no longer
allowed for
If |
Examples
Example #1 datefmt_create() example
<?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);
?>
Example #2 OO example
<?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);
?>
The above example will output:
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
See Also
- datefmt_format() - Format the date/time value as a string
- datefmt_parse() - Parse string to a timestamp value
- datefmt_get_error_code() - Get the error code from last operation
- datefmt_get_error_message() - Get the error text from the last operation.
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Поддержка языков и кодировок
- Internationalization Functions
- Функция IntlDateFormatter::create() - Create a date formatter
- Функция IntlDateFormatter::format() - Format the date/time value as a string
- Функция IntlDateFormatter::formatObject() - Formats an object
- Функция IntlDateFormatter::getCalendar() - Get the calendar type used for the IntlDateFormatter
- Функция IntlDateFormatter::getDateType() - Get the datetype used for the IntlDateFormatter
- Функция IntlDateFormatter::getErrorCode() - Get the error code from last operation
- Функция IntlDateFormatter::getErrorMessage() - Get the error text from the last operation.
- Функция IntlDateFormatter::getLocale() - Get the locale used by formatter
- Функция IntlDateFormatter::getPattern() - Get the pattern used for the IntlDateFormatter
- Функция IntlDateFormatter::getTimeType() - Get the timetype used for the IntlDateFormatter
- Функция IntlDateFormatter::getTimeZoneId() - Get the timezone-id used for the IntlDateFormatter
- Функция IntlDateFormatter::getCalendarObject() - Get copy of formatterʼs calendar object
- Функция IntlDateFormatter::getTimeZone() - Get formatterʼs timezone
- Функция IntlDateFormatter::isLenient() - Get the lenient used for the IntlDateFormatter
- Функция IntlDateFormatter::localtime() - Parse string to a field-based time value
- Функция IntlDateFormatter::parse() - Parse string to a timestamp value
- Функция IntlDateFormatter::setCalendar() - Sets the calendar type used by the formatter
- Функция IntlDateFormatter::setLenient() - Set the leniency of the parser
- Функция IntlDateFormatter::setPattern() - Set the pattern used for the IntlDateFormatter
- Функция IntlDateFormatter::setTimeZoneId() - Sets the time zone to use
- Функция IntlDateFormatter::setTimeZone() - Sets formatterʼs timezone
Коментарии
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 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.
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
)