CakeFest 2024: The Official CakePHP Conference

IntlDateFormatter::format

datefmt_format

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)

IntlDateFormatter::format -- datefmt_formatFormate la date et l'heure sous forme de chaîne

Description

Style orienté objet

public IntlDateFormatter::format(IntlCalendar|DateTimeInterface|array|string|int|float $datetime): string|false

Style procédural

Formate l'heure sous forme de chaîne.

Liste de paramètres

formatter

La ressource de formateur IntlDateFormatter.

datetime

La valeur à formater. Ce peut être un objet DateTimeInterface, un objet IntlCalendar, un type numeric représentant un (peut être fractionné) nombre de secondes depuis l'époque ou un array au format de sortie de la fonction localtime().

Si un objet DateTime ou un objet IntlCalendar est passé, son décalage horaire ne sera pas considéré. L'objet devra être formaté en utilisant le décalage horaire configuré pour ce formateur. Si vous souhaitez utiliser le décalage horaire de l'objet à formater, la méthode IntlDateFormatter::setTimeZone() devra être appelée avant le décalage horaire de l'objet. Vous pouvez aussi utiliser la méthode IntlDateFormatter::formatObject() pour obtenir le même résultat.

Valeurs de retour

La chaîne formatée, ou, si une erreur survient, false.

Historique

Version Description
7.1.5 Ajout du support pour fournir un objet générique DateTimeInterface pour le paramètre datetime. Anciennement, seulement les objets valide DateTime étaient supportés.
PECL 3.0.0 Il est maintenant possible de passer un objet IntlCalendar comme valeur du paramètre datetime.

Exemples

Exemple #1 Exemple avec datefmt_format()

<?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 orienté objet

<?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);
?>

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

Exemple #3 Exemple avec un objet IntlCalendar

<?php
$tz
= reset(iterator_to_array(IntlTimeZone::createEnumeration('FR')));
$formatter = IntlDateFormatter::create(
'fr_FR',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
$tz,
IntlDateFormatter::GREGORIAN
);

$cal = IntlCalendar::createInstance($tz, '@calendar=islamic-civil');
$cal->set(IntlCalendar::FIELD_MONTH, 8); //9ème mois, Ramadan
$cal->set(IntlCalendar::FIELD_DAY_OF_MONTH, 1); //1er jour
$cal->clear(IntlCalendar::FIELD_HOUR_OF_DAY);
$cal->clear(IntlCalendar::FIELD_MINUTE);
$cal->clear(IntlCalendar::FIELD_SECOND);
$cal->clear(IntlCalendar::FIELD_MILLISECOND);

echo
"Dans l'année Islamique, le Ramadan commence le :\n\t",
$formatter->format($cal), "\n";

//C'est le décalage horaire du formater qui est utilisé ici :
$formatter->setTimeZone('Asia/Tokyo');
echo
"Après modification du décalage horaire :\n\t",
$formatter->format($cal), "\n";

L'exemple ci-dessus va afficher :

Dans l'année Islamique, le Ramadan commence le :
    mardi 9 juillet 2013 19:00:00 heure avancée d’Europe centrale
Après modification du décalage horaire :
    mercredi 10 juillet 2013 02:00:00 heure normale du Japon

Voir aussi

add a note

User Contributed Notes 4 notes

up
44
mail dot dennisbecker at gmail dot com
11 years ago
You should know that PHPs IntlDateFormatter class uses ISO date format codes instead of PHPs date() format codes. It is not really clear mentioned from my point of view.

A good list to find ISO codes is available at http://framework.zend.com/manual/1.12/en/zend.date.constants.html#zend.date.constants.selfdefinedformats and such a list should be added here, too.
up
14
con at bartrail dot de
12 years ago
I hope this will save some time for others who have to struggle with different php versions on dev and prod plattform in the future:

when formatting a DateTime object with a *custom pattern*, be sure to use a timestamp to pass at the IntlDateFormatter::format in order to have it working on different php versions:

Example for PHP Version 5.3.5-1ubuntu7.2 (my dev machine):
<?php
$date
= new \DateTime();

$dateFormatter = \IntlDateFormatter::create(
\Locale::getDefault(),
\IntlDateFormatter::NONE,
\IntlDateFormatter::NONE,
\date_default_timezone_get(),
\IntlDateFormatter::GREGORIAN,
'EEEE'
);

var_dump($dateFormatter->format($date)); // string(6) "Monday"
?>

Example for PHP Version 5.3.2-1ubuntu4.9 (the prod server):
<?php
// same formatting as above

var_dump($dateFormatter->format($date)); // bool(false)
?>

When using $dateFormatter->format($date->getTimestamp()), you'll always get the formatted and localized string instead of a false.
up
0
alex
13 years ago
It's important to note that a conversion of timezones will be made from the default timezone (date_default_timezone_set()) and the timezone you passed in the constructor (or datefmt_create()).

If you are inserting the dates into your database as UTC time, make sure to set date_default_timezone_set to UTC as well (or any other timezone, but they need to be the same). Once you call ::format, you will get the converted time.
To Top