PHP 8.1.9 Released!

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Создаёт средство форматирования даты

Описание

Объектно-ориентированный стиль

public static IntlDateFormatter::create(
    ?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

Объектно-ориентированный стиль (конструктор)

public IntlDateFormatter::__construct(
    ?string $locale,
    int $dateType = IntlDateFormatter::FULL,
    int $timeType = IntlDateFormatter::FULL,
    IntlTimeZone|DateTimeZone|string|null $timezone = null,
    IntlCalendar|int|null $calendar = null,
    ?string $pattern = null
)

Процедурный стиль

datefmt_create(
    ?string $locale,
    int $dateType,
    int $timeType,
    IntlTimeZone|DateTimeZone|string|null $timezone = null,
    IntlCalendar|int|null $calendar = null,
    string $pattern = ""
): ?IntlDateFormatter

Создаёт средство форматирования даты.

Список параметров

locale

Языковой стандарт, используемый при форматировании или синтаксическом анализе или null для использования значения, указанного в ini-настройке intl.default_locale.

dateType

Тип даты (none, short, medium, long, full). Одна из констант IntlDateFormatter.

timeType

Тип времени (none, short, medium, long, full). Одна из констант IntlDateFormatter.

timezone

Идентификатор часового пояса. По умолчанию (и тот, который используется, если указан null) - это тот, который возвращается date_default_timezone_get() или, если применимо, объект IntlCalendar, указанный в параметре calendar. Этот идентификатор должен быть корректным идентификатором в базе данных 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 в случае возникновения ошибки.

Список изменений

Версия Описание
5.5.0/PECL 3.0.0

Объект IntlCalendar допускается в параметре calendar.

Объекты IntlTimeZone и DateTimeZone допускаются в параметре timezone.

Недопустимые идентификаторы часового пояса (включая пустые строки) больше не допускаются в параметре timezone.

Если в параметре timezone указано значение null, идентификатор часового пояса, заданный date_default_timezone_get(), будет использоваться вместо значения ICU по умолчанию.

Примеры

Пример #1 Пример использования datefmt_create()

<?php
$fmt 
datefmt_create"en_US" ,IntlDateFormatter::FULLIntlDateFormatter::FULL,
    
'America/Los_Angeles'IntlDateFormatter::GREGORIAN  );
echo 
"First Formatted output is ".datefmt_format$fmt 0);
$fmt datefmt_create"de-DE" ,IntlDateFormatter::FULLIntlDateFormatter::FULL,
    
'America/Los_Angeles',IntlDateFormatter::GREGORIAN  );
echo 
"Second Formatted output is ".datefmt_format$fmt 0);

$fmt datefmt_create"en_US" ,IntlDateFormatter::FULLIntlDateFormatter::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::FULLIntlDateFormatter::FULL,
     
'America/Los_Angeles',IntlDateFormatter::GREGORIAN  ,"MM/dd/yyyy");
echo 
"Second Formatted output with pattern is ".datefmt_format$fmt 0);
?>

Пример #2 OO example

<?php
$fmt 
= new IntlDateFormatter"en_US" ,IntlDateFormatter::FULLIntlDateFormatter::FULL,
    
'America/Los_Angeles',IntlDateFormatter::GREGORIAN  );
echo 
"Первый форматированный вывод: ".$fmt->format(0);
$fmt = new IntlDateFormatter"de-DE" ,IntlDateFormatter::FULLIntlDateFormatter::FULL,
    
'America/Los_Angeles',IntlDateFormatter::GREGORIAN  );
echo 
"Второй форматированный вывод: ".$fmt->format(0);

$fmt = new IntlDateFormatter"en_US" ,IntlDateFormatter::FULLIntlDateFormatter::FULL,
     
'America/Los_Angeles',IntlDateFormatter::GREGORIAN  ,"MM/dd/yyyy");
echo 
"Первый форматированный вывод с шаблоном: ".$fmt->format(0);
$fmt = new IntlDateFormatter"de-DE" ,IntlDateFormatter::FULLIntlDateFormatter::FULL,
      
'America/Los_Angeles',IntlDateFormatter::GREGORIAN "MM/dd/yyyy");
echo 
"Второй форматированный вывод с шаблоном: ".$fmt->format(0);
?>

Результат выполнения данного примера:

Первый форматированный вывод: Wednesday, December 31, 1969 4:00:00 PM PT
Второй форматированный вывод: Mittwoch, 31. Dezember 1969 16:00 Uhr GMT-08:00
Первый форматированный вывод с шаблоном: 12/31/1969
Второй форматированный вывод с шаблоном: 12/31/1969

Смотрите также

  • datefmt_format() - Форматирует значение даты/времени в виде строки
  • datefmt_parse() - Преобразует строку в значение отметки времени
  • datefmt_get_error_code() - Получает код ошибки последней операции
  • datefmt_get_error_message() - Получает текст ошибки последней операции

add a note

User Contributed Notes 4 notes

up
3
mikko dot rantalainen at peda dot net
10 years ago
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".
up
3
daniel dot rhodes at warpasylum dot co dot uk
10 years ago
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]
?>
up
1
Anonymous
4 years ago
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".
up
0
Patanjali
11 months ago
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.
To Top