PHP 8.5.0 Alpha 2 available for testing

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::__constructCrea un formateador de fecha

Descripción

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 (constructor)

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 procedimental

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

Crea un formateador de fecha.

Parámetros

locale

La configuración local a utilizar para formatear y analizar o null para utilizar el valor especificado en la configuración ini intl.default_locale.

dateType

El tipo de fecha a utilizar (none, short, medium, long, full). Es una de las constantes IntlDateFormatter.

timeType

Formato de hora determinado por una de las constantes de IntlDateFormatter. El valor por omisión es IntlDateFormatter::FULL.

timezone

El identificador de la zona horaria. Por omisión, (esto también será el valor por omisión que se utilizará si se proporciona null) será el devuelto por la función date_default_timezone_get() o, si es aplicable, el de objeto IntlCalendar pasado al argumento calendar. Este identificador debe ser un identificador válido en la base de datos ICU, o un identificador que represente una zona horaria explícita, como GMT-05:30.

Este argumento también puede ser un objeto IntlTimeZone o un objeto DateTimeZone.

calendar

Calendario a utilizar para el formato o el análisis. El valor por omisión es null, lo que corresponde a la constante IntlDateFormatter::GREGORIAN. Puede ser una de las constantes de calendario IntlDateFormatter o un IntlCalendar. Cualquier objeto IntlCalendar pasado será clonado; no será modificado por IntlDateFormatter. Determinará el tipo de calendario utilizado (gregoriano, islámico, persa, etc.) y si null es proporcionado en el argumento timezone, la zona horaria también será utilizada.

pattern

El patrón a utilizar para el formato o el análisis. Los patrones disponibles están documentados en » https://unicode-org.github.io/icu/userguide/format_parse/datetime/.

Valores devueltos

El objeto IntlDateFormatter creado, o null si ocurre un error.

Errores/Excepciones

Se lanza una ValueError si locale es inválido.

Historial de cambios

Versión Descripción
8.4.0 Se lanza una ValueError si locale es inválido.
8.1.0

Los argumentos dateType y timeType ahora son opcionales.

Ejemplos

Ejemplo #1 Ejemplo con datefmt_create(), procedimental

<?php
$fmt
= datefmt_create( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles', IntlDateFormatter::GREGORIAN );
echo
"El primer formato mostrado es ".datefmt_format( $fmt , 0);
$fmt = datefmt_create( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN );
echo
"El segundo formato mostrado es ".datefmt_format( $fmt , 0);

$fmt = datefmt_create( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN ,"MM/dd/yyyy");
echo
"El primer formato se muestra con el patrón: ".datefmt_format( $fmt , 0);
$fmt = datefmt_create( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN ,"MM/dd/yyyy");
echo
"El segundo formato se muestra con el patrón: ".datefmt_format( $fmt , 0);
?>

Ejemplo #2 Ejemplo con datefmt_create(), POO

<?php
$fmt
= new IntlDateFormatter( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN );
echo
"El primer formato mostrado es ".$fmt->format(0);
$fmt = new IntlDateFormatter( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN );
echo
"El segundo formato mostrado es ".$fmt->format(0);

$fmt = new IntlDateFormatter( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN ,"MM/dd/yyyy");
echo
"El primer formato se muestra con el patrón: ".$fmt->format(0);
$fmt = new IntlDateFormatter( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN , "MM/dd/yyyy");
echo
"El segundo formato se muestra con el patrón: ".$fmt->format(0);
?>

Ejemplo #3 Ejemplo de manejo de configuración local inválida

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

El ejemplo anterior mostrará :

El primer formato mostrado es Wednesday, December 31, 1969 4:00:00 PM PT
El segundo formato mostrado es Mittwoch, 31. Dezember 1969 16:00 Uhr GMT-08:00
El primer formato se muestra con el patrón: 12/31/1969
El segundo formato se muestra con el patrón: 12/31/1969

Ver también

add a note

User Contributed Notes 5 notes

up
4
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
13 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
2 years 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
7 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