CakeFest 2024: The Official CakePHP Conference

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::__constructCrear un formateador de fechas

Descripción

Estilo orientado a objetos

public static IntlDateFormatter::create(
    string $locale,
    int $datetype,
    int $timetype,
    mixed $timezone = NULL,
    mixed $calendar = NULL,
    string $pattern = ""
): IntlDateFormatter

Estilo orientado a objetos (constructor)

public IntlDateFormatter::__construct(
    string $locale,
    int $datetype,
    int $timetype,
    mixed $timezone = NULL,
    mixed $calendar = NULL,
    string $pattern = ""
)

Estilo por procedimientos

datefmt_create(
    string $locale,
    int $datetype,
    int $timetype,
    mixed $timezone = NULL,
    mixed $calendar = NULL,
    string $pattern = ""
): IntlDateFormatter

Crear un formateador de fechas.

Parámetros

locale

Configuración regional a usar al formatear o procesar, o null para usar el valor especificado en el ajuste ini intl.default_locale.

datetype

Tipo de fecha a usar (none, short, medium, long, full). Es una de las contantes de IntlDateFormatter. También puede ser null, en cuyo caso se usará el tipo de fecha predeterminado de ICU.

timetype

Tipo de hora a usar (none, short, medium, long, full). Es una de las contantes de IntlDateFormatter. También puede ser null, en cuyo caso se usará el tipo de hora predeterminado de ICU.

timezone

ID de la zona horaria. El predeterminado (y el usado si se proporciona null) es el devuelto por date_default_timezone_get() o, si es aplicable, aquel del objeto IntlCalendar pasado al parámetro calendar. Este ID debe ser un identificador válido en la base de datos de ICU o un ID que represente un índice explícito, como GMT-05:30.

También puede ser un objeto IntlTimeZone o DateTimeZone.

calendar

Calendario a usar al formatear o procesar. El valor predeteminado es null, el cual corresponde a IntlDateFormatter::GREGORIAN. También puede ser una de las constantes de calendario de IntlDateFormatter o un IntlCalendar. Cualquier objeto IntlCalendar pasado será clonado; no será cambiado por IntlDateFormatter. Esto determinará el tipo de calendario usado (gregoriano, islámico, persa, etc.) y, si se proporciona null al parámetro timezone, también la zona horaria usada.

pattern

Patrón opcional a usar al formatear o procesar. Los posibles patrones están documentados en » https://unicode-org.github.io/icu/userguide/format_parse/datetime/.

Valores devueltos

El IntlDateFormatter creado o false en caso de error.

Historial de cambios

Versión Descripción
5.5.0/PECL 3.0.0

Se permite un objeto IntlCalendar para calendar.

Los objetos de tipo IntlTimeZone y DateTimeZone están permitidos para timezone.

Los identificadores de zonas horarias válidos (incluyendo string vacíos) ya no están permitidos para timezone.

Si se proporciona null a timezone, el identificador de la zona horaria dado por date_default_timezone_get() se usará en lugar del predeterminado de ICU.

Ejemplos

Ejemplo #1 Ejemplo de datefmt_create()

<?php
$fmt
= datefmt_create( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles', IntlDateFormatter::GREGORIAN );
echo
"La primera salida formateada es ".datefmt_format( $fmt , 0);
$fmt = datefmt_create( "es-ES", IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles', IntlDateFormatter::GREGORIAN );
echo
"La segunda salida formateada es ".datefmt_format( $fmt , 0);

$fmt = datefmt_create( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN ,"MM/dd/yyyy");
echo
"La primera salida formateada con patrón es ".datefmt_format( $fmt , 0);
$fmt = datefmt_create( "es-ES", IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles', IntlDateFormatter::GREGORIAN, "dd/MM/yyyy");
echo
"La segunda salida formateada con patrón es ".datefmt_format( $fmt , 0);
?>

Ejemplo #2 Ejemplo orientado a objetos

<?php
$fmt
= new IntlDateFormatter( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN );
echo
"La primera salida formateada es ".$fmt->format(0);
$fmt = new IntlDateFormatter( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles', IntlDateFormatter::GREGORIAN );
echo
"La segunda salida formateada es ".$fmt->format(0);

$fmt = new IntlDateFormatter( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN ,"MM/dd/yyyy");
echo
"La primera salida formateada con patrón es ".$fmt->format(0);
$fmt = new IntlDateFormatter( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles', IntlDateFormatter::GREGORIAN, "dd/MM/yyyy");
echo
"La segunda salida formateada con patrón es ".$fmt->format(0);
?>

El resultado del ejemplo sería:

La primera salida formateada es Wednesday, December 31, 1969 4:00:00 PM PT
La segunda salida formateada es Mittwoch, 31. Dezember 1969 16:00 Uhr GMT-08:00
La primera salida formateada con patrón es 12/31/1969
La segunda salida formateada con patrón es 12/31/1969

Ver también

add a note

User Contributed Notes 5 notes

up
3
daniel dot rhodes at warpasylum dot co dot uk
12 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
11 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
5 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
2 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