PHP 8.5.0 Alpha 2 available for testing

IntlDateFormatter::format

datefmt_format

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

IntlDateFormatter::format -- datefmt_formatFormatea la fecha y la hora como string

Descripción

Estilo orientado a objetos

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

Estilo procedimental

Formatea la hora como string.

Parámetros

formatter

El recurso de formateador IntlDateFormatter.

datetime

El valor a formatear. Puede ser un objeto DateTimeInterface, un objeto IntlCalendar, un tipo numeric representando un (puede ser fraccionado) número de segundos desde la época o un array en el formato de salida de la función localtime().

Si se pasa un objeto DateTime o un objeto IntlCalendar, su zona horaria no será considerada. El objeto deberá ser formateado utilizando la zona horaria configurada para este formateador. Si se desea utilizar la zona horaria del objeto a formatear, el método IntlDateFormatter::setTimeZone() deberá ser llamado antes de la zona horaria del objeto. También puede utilizarse el método IntlDateFormatter::formatObject() para obtener el mismo resultado.

Valores devueltos

El string formateado, o, si ocurre un error, false.

Historial de cambios

Versión Descripción
7.1.5 Se añadió el soporte para proporcionar un objeto genérico DateTimeInterface para el argumento datetime. Anteriormente, solo los objetos válidos DateTime eran soportados.
PECL intl 3.0.0 Ahora es posible pasar un objeto IntlCalendar como valor del argumento datetime.

Ejemplos

Ejemplo #1 Ejemplo con datefmt_format()

<?php
$fmt
= datefmt_create(
'en_US',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'America/Los_Angeles',
IntlDateFormatter::GREGORIAN
);
echo
'El primer formato mostrado es ' . datefmt_format($fmt, 0);

$fmt = datefmt_create(
'de-DE',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'America/Los_Angeles',
IntlDateFormatter::GREGORIAN
);
echo
'El segundo formato mostrado es ' . datefmt_format($fmt, 0);

$fmt = datefmt_create(
'en_US',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'America/Los_Angeles',
IntlDateFormatter::GREGORIAN,
'MM/dd/yyyy'
);
echo
'El primer formato es mostrado con el patrón ' . datefmt_format($fmt, 0);

$fmt = datefmt_create(
'de-DE',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'America/Los_Angeles',
IntlDateFormatter::GREGORIAN,
'MM/dd/yyyy'
);
echo
"El segundo formato es mostrado con el patrón " . 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
'El primer formato mostrado es ' . $fmt->format(0);

$fmt = new IntlDateFormatter(
'de-DE',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'America/Los_Angeles',
IntlDateFormatter::GREGORIAN
);
echo
'El segundo formato mostrado es ' . $fmt->format(0);

$fmt = new IntlDateFormatter(
'en_US',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'America/Los_Angeles',
IntlDateFormatter::GREGORIAN,
'MM/dd/yyyy'
);
echo
'El primer formato es mostrado con el patrón ' . $fmt->format(0);

$fmt = new IntlDateFormatter(
'de-DE',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'America/Los_Angeles',
IntlDateFormatter::GREGORIAN,
'MM/dd/yyyy'
);
echo
'El segundo formato es mostrado con el patrón ' . $fmt->format(0);
?>

El ejemplo anterior mostrará :

El primer formato mostrado es Wednesday, December 31, 1969 4:00:00 PM PT
El segundo formato mostrado es Mittwoch, 31. Dezember 1969 16:00 Uhr GMT-08:00
El primer formato es mostrado con el patrón : 12/31/1969
El segundo formato es mostrado con el patrón : 12/31/1969

Ejemplo #3 Ejemplo 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); //9º mes, Ramadán
$cal->set(IntlCalendar::FIELD_DAY_OF_MONTH, 1); //1º día
$cal->clear(IntlCalendar::FIELD_HOUR_OF_DAY);
$cal->clear(IntlCalendar::FIELD_MINUTE);
$cal->clear(IntlCalendar::FIELD_SECOND);
$cal->clear(IntlCalendar::FIELD_MILLISECOND);

echo
"En el año Islámico, el Ramadán comienza el :\n\t",
$formatter->format($cal), "\n";

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

El ejemplo anterior mostrará :

En el año Islámico, el Ramadán comienza el :
    martes 9 julio 2013 19:00:00 hora avanzada de Europa central
Después de modificar la zona horaria :
    miércoles 10 julio 2013 02:00:00 hora normal de Japón

Ver también

add a note

User Contributed Notes 4 notes

up
43
mail dot dennisbecker at gmail dot com
12 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
13
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
15 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