PHP 8.4.1 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::__constructCria um formatador de data

Descrição

Estilo orientado a objetos

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

Estilo orientado a objetos (construtor)

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
)

Estilo procedural

datefmt_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

Cria um formatador de data.

Parâmetros

locale

Localidade a ser utilizada ao formatar ou interpretar, ou null para utilizar o valor especificado na configuração ini intl.default_locale.

dateType

Formato da data determinado por uma das constantes IntlDateFormatter. O valor padrão é IntlDateFormatter::FULL.

timeType

Formato do horário determinado por uma das constantes IntlDateFormatter. O valor padrão é IntlDateFormatter::FULL.

timezone

ID do fuso horário. O padrão (que também é usado se null for fornecido) é o retornado por date_default_timezone_get() ou, se aplicável, o do objeto IntlCalendar passado para o parâmetro calendar. Este ID precisa ser um identificador válido no banco de dados da ICU ou um ID representando um deslocamento específico, como em GMT-05:30.

Este parâmetro tammbém pode ser um objeto IntlTimeZone ou DateTimeZone.

calendar

Calendário a ser utilizado para formatação ou interpretação. O valor padrão é null, que corresponde a IntlDateFormatter::GREGORIAN. Pode ser uma das constantes de calendário IntlDateFormatter ou um objeto IntlCalendar. Qualquer objeto IntlCalendar passado será clonado; ele não será alterado por IntlDateFormatter. Este parâmetro determinará o tipo de calendário utilizado (gregoriano, islâmico, persa, etc.) e, se null for fornecido para o parâmetro timezone, também definirá o fuso horário utilizado.

pattern

Modelo opcional a ser utilizado ao formatar ou interpretar. Modelos possíveis estão documentados em » https://unicode-org.github.io/icu/userguide/format_parse/datetime/.

Valor Retornado

O objeto IntlDateFormatter criado ou null em caso de falha.

Registro de Alterações

Versão Descrição
8.1.0

Parêmatros dateType e timeType agora são opcionais.

Exemplos

Exemplo #1 Exemplo de datefmt_create()

<?php
$fmt
= datefmt_create( "pt_BR" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Sao_Paulo', IntlDateFormatter::GREGORIAN );
echo
"Primeira saída formatada é ".datefmt_format( $fmt , 0)."\n";
$fmt = datefmt_create( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Sao_Paulo',IntlDateFormatter::GREGORIAN );
echo
"Segunda saída formatada é ".datefmt_format( $fmt , 0)."\n";

$fmt = datefmt_create( "pt_BR" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Sao_Paulo',IntlDateFormatter::GREGORIAN ,"MM/dd/yyyy");
echo
"Primeira saída formatada com modelo é ".datefmt_format( $fmt , 0)."\n";
$fmt = datefmt_create( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Sao_Paulo',IntlDateFormatter::GREGORIAN ,"MM/dd/yyyy");
echo
"Segunda saída formatada com modelo é ".datefmt_format( $fmt , 0)."\n";
?>

Exemplo #2 Exemplo OO

<?php
$fmt
= new IntlDateFormatter( "pt_BR" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Sao_Paulo',IntlDateFormatter::GREGORIAN );
echo
"Primeira saída formatada é ".$fmt->format(0)."\n";
$fmt = new IntlDateFormatter( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Sao_Paulo',IntlDateFormatter::GREGORIAN );
echo
"Segunda saída formatada é ".$fmt->format(0)."\n";

$fmt = new IntlDateFormatter( "pt_BR" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Sao_Paulo',IntlDateFormatter::GREGORIAN ,"MM/dd/yyyy");
echo
"Primeira saída formatada com modelo é ".$fmt->format(0)."\n";
$fmt = new IntlDateFormatter( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Sao_Paulo',IntlDateFormatter::GREGORIAN , "MM/dd/yyyy");
echo
"Segunda saída formatada com modelo é ".$fmt->format(0)."\n";
?>

Exemplo #3 Exemplo de manipulação de localidade inválida

<?php
try {
$fmt = new IntlDateFormatter(
'invalid_locale',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'dunno',
IntlDateFormatter::GREGORIAN,
);
} catch (
\Error $e) {
// ...
}
?>

O exemplo acima produzirá:

Primeira saída formatada é quarta-feira, 31 de dezembro de 1969 21:00:00 Horário Padrão de Brasília
Segunda saída formatada é Mittwoch, 31. Dezember 1969 um 21:00:00 Brasília-Normalzeit
Primeira saída formatada com modelo é 12/31/1969
Segunda saída formatada com modelo é 12/31/1969

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 5 notes

up
3
daniel dot rhodes at warpasylum dot co dot uk
13 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
2
mikko dot rantalainen at peda dot net
12 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
1
info at mobger dot de
1 year ago
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
)
up
1
Anonymous
6 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
3 years 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