phpday 2025 - Call For Papers

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::__constructCrée un formateur de date

Description

Style orienté objet

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

Style orienté objet (constructeur)

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
)

Style procédural

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

Crée un formateur de date.

Liste de paramètres

locale

La locale à utiliser pour formater et analyser ou null pour utiliser la valeur spécifiée dans la configuration ini intl.default_locale.

dateType

Le type de date à utiliser (none, short, medium, long, full). C'est l'une des constantes IntlDateFormatter.

timeType

Format de l'heure déterminé par l'une des constantes d'IntlDateFormatter. La valeur par défaut est IntlDateFormatter::FULL.

timezone

L'identifiant du fuseau horaire. Par défaut, (ce sera également la valeur par défaut qui sera utilisée si null est fourni) ce sera celui retourné par la fonction date_default_timezone_get() ou, si applicable, celui de l'objet IntlCalendar passé au paramètre calendar.Cet identifiant doit être un identifiant valide dans la base de données ICU, ou un identifiant représentant une possible explicite, comme GMT-05:30.

Ce paramètre peut aussi être un objet IntlTimeZone ou un objet DateTimeZone.

calendar

Calendrier à utiliser pour le formatage ou l'analyse. La valeur par défaut est null, ce qui correspond à la constante IntlDateFormatter::GREGORIAN. Peut être une des constantes de calendrier IntlDateFormatter ou un IntlCalendar. Tout objet IntlCalendar passé sera clôné ; il ne sera pas modifié par IntlDateFormatter. Il déterminera le type de calendrier utilisé (grégorien, islamique, persien, etc.) et si null est fourni dans le paramètre timezone, le fuseau horaire sera également utilisé.

pattern

Le modèle à utiliser pour le formatage ou l'analyse. Les modèles disponibles sont documentés sur » https://unicode-org.github.io/icu/userguide/format_parse/datetime/.

Valeurs de retour

L'objet IntlDateFormatter créé, ou null si une erreur survient.

Erreurs / Exceptions

Une ValueError est levée si locale est invalide.

Historique

Version Description
8.4.0 Une ValueError est levée si locale est invalide.
8.1.0

Les paramètres dateType et timeType sont désormais facultatifs.

Exemples

Exemple #1 Exemple avec datefmt_create(), procédural

<?php
$fmt
= datefmt_create( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles', IntlDateFormatter::GREGORIAN );
echo
"Le premier format affiché est ".datefmt_format( $fmt , 0);
$fmt = datefmt_create( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN );
echo
"Le deuxième format affiché est ".datefmt_format( $fmt , 0);

$fmt = datefmt_create( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN ,"MM/dd/yyyy");
echo
"Le premier format est affiché avec le modèle : ".datefmt_format( $fmt , 0);
$fmt = datefmt_create( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN ,"MM/dd/yyyy");
echo
"Le deuxième format est affiché avec le modèle : ".datefmt_format( $fmt , 0);
?>

Exemple #2 Exemple avec datefmt_create(), POO

<?php
$fmt
= new IntlDateFormatter( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN );
echo
"Le premier format affiché est ".$fmt->format(0);
$fmt = new IntlDateFormatter( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN );
echo
"Le deuxième format affiché est ".$fmt->format(0);

$fmt = new IntlDateFormatter( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN ,"MM/dd/yyyy");
echo
"Le premier format est affiché avec le modèle : ".$fmt->format(0);
$fmt = new IntlDateFormatter( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN , "MM/dd/yyyy");
echo
"Le deuxième format est affiché avec le modèle : ".$fmt->format(0);
?>

Exemple #3 Exemple de gestion de locale invalide

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

L'exemple ci-dessus va afficher :

Le premier format affiché est Wednesday, December 31, 1969 4:00:00 PM PT
Le deuxième format affiché est Mittwoch, 31. Dezember 1969 16:00 Uhr GMT-08:00
Le premier format est affiché avec le modèle : 12/31/1969
Le deuxième format est affiché avec le modèle : 12/31/1969

Voir aussi

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
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