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.
IntlDateFormatter::format
datefmt_format
(PHP 5 >= 5.3.0, PECL intl >= 1.0.0)
IntlDateFormatter::format -- datefmt_format — Formate la date et l'heure sous forme de chaîne
Description
Style orienté objet
Style procédural
Formate l'heure sous forme de chaîne.
Liste de paramètres
-
fmt -
La ressource de formateur IntlDateFormatter.
-
value -
La valeur à formater. Ce peut être un objet DateTime, un entier représentant un timestamp Unix (nombre de secondes depuis l'époque UTC), ou un tableau au format de sortie de la fonction localtime().
Valeurs de retour
La chaîne formatée, ou, si une erreur survient, FALSE.
Historique
| Version | Description |
|---|---|
| 5.3.4 |
Le support des objets DateTime dans le paramètre
value a été ajouté.
|
Exemples
Exemple #1 Exemple avec datefmt_format(), 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_format(), 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);
?>
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
- datefmt_create() - Crée un formateur de date
- datefmt_parse() - Analyse une chaîne vers un timestamp
- datefmt_get_error_code() - Lit le code d'erreur de la dernière opération
- datefmt_get_error_message() - Lit le dernier message d'erreur
con at bartrail dot de ¶
1 year ago
mail dot dennisbecker at gmail dot com ¶
4 months 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.
alex ¶
3 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.
