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 — Formatear el valor fecha/hora como una cadena
Descripción
Estilo orientado a objetos
Estilo por procedimientos
Formatea el valor del instante como una cadena.
Parámetros
-
fmt -
El recurso del formateador de fechas.
-
value -
El valor a formatear. Puede ser un objetos de la clase DateTime, un integer representando un valor de marca de tiempo Unix (segundos transcurridos desde la Época Unix, UTC) o un array en el formato devuelto por localtime().
Valores devueltos
La cadena formateada o, si ocurrión un error, FALSE.
Historial de cambios
| Versión | Descripción |
|---|---|
| 5.3.4 |
Se añadió el soporte para proporcionar objetos de la clase DateTime
al parámetro value.
|
Ejemplos
Ejemplo #1 Ejemplo de datefmt_format()
<?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( "es-ES", 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( "es-ES", 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 miércoles 31 de diciembre de 1969 16H00'00" PST La primera salida formateada con patrón es 12/31/1969 La segunda salida formateada con patrón es 31/12/1969
Ver también
- datefmt_create() - Crear un formateador de fechas
- datefmt_parse() - Convertir una cadena en un valor de marca de tiempo
- datefmt_get_error_code() - Obtener el código del error de la última operación
- datefmt_get_error_message() - Obtener el texto del error de la última operación
con at bartrail dot de ¶
1 year ago
mail dot dennisbecker at gmail dot com ¶
3 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.
