PHP 8.4.1 Released!

IntlDateFormatter::format

datefmt_format

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

IntlDateFormatter::format -- datefmt_formatFormatear el valor fecha/hora como una cadena

Descripción

Estilo orientado a objetos

public IntlDateFormatter::format(mixed $value): string

Estilo por procedimientos

datefmt_format(IntlDateFormatter $fmt, mixed $value): string

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 objeto DateTime, un objeto IntlCalendar, un tipo numeric que representa un número (posiblemente fraccionario) de segundos desde la época o un array en el formato generado por localtime().

Si se proporciona un objeto DateTime o IntlCalendar, su zona horaria no se considera. El objeto será formateado usando la zona horaria configurada del formateador. Si se quiere usar la zona horaria del objeto a formatear, IntlDateFormatter::setTimeZone() debe ser invocado antes con la zona horaria del objeto. Alternativamente, la función estática IntlDateFormatter::formatObject() podría usarse en su lugar.

Valores devueltos

La cadena formateada o, si ocurrión un error, false.

Historial de cambios

Versión Descripción
5.5.0/PECL 3.0.0 Se añadió el soporta para proporcionar objetos IntlCalendar al parámetro value.
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(
'de-DE',
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(
'de-DE',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'America/Los_Angeles',
IntlDateFormatter::GREGORIAN,
'MM/dd/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(
'de-DE',
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(
'de-DE',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'America/Los_Angeles',
IntlDateFormatter::GREGORIAN,
'MM/dd/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

Ejemplo #3 Con un objeto 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); //9th month, Ramadan
$cal->set(IntlCalendar::FIELD_DAY_OF_MONTH, 1); //1st day
$cal->clear(IntlCalendar::FIELD_HOUR_OF_DAY);
$cal->clear(IntlCalendar::FIELD_MINUTE);
$cal->clear(IntlCalendar::FIELD_SECOND);
$cal->clear(IntlCalendar::FIELD_MILLISECOND);

echo
"En este año islámico, el Ramadan empezó/empezará el:\n\t",
$formatter->format($cal), "\n";

//Es la zona hiraria del formateador la que se usa:
$formatter->setTimeZone('Asia/Tokyo');
echo
"Después de cambiar la zona horaria:\n\t",
$formatter->format($cal), "\n";

El resultado del ejemplo sería:

En este año islámico, el Ramadan empezó/empezará el:
    mardi 9 juillet 2013 19:00:00 heure avancée d’Europe centrale
Después de cambiar la zona horaria:
    mercredi 10 juillet 2013 02:00:00 heure normale du Japon

Ver también

add a note

User Contributed Notes 4 notes

up
46
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
15
con at bartrail dot de
13 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
14 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