PHP 8.4.1 Released!

IntlDateFormatter::formatObject

datefmt_format_object

(PHP 5 >= 5.5.0, PHP 7, PHP 8, PECL intl >= 3.0.0)

IntlDateFormatter::formatObject -- datefmt_format_objectFormata um objeto

Descrição

Estilo orientado a objetos

public static IntlDateFormatter::formatObject(IntlCalendar|DateTimeInterface $datetime, array|int|string|null $format = null, ?string $locale = null): string|false

Estilo procedural

datefmt_format_object(IntlCalendar|DateTimeInterface $datetime, array|int|string|null $format = null, ?string $locale = null): string|false

Esta função permite formatar um objeto IntlCalendar ou DateTime sem que antes seja criado um objeto IntlDateFormatter explicitamente.

O objeto IntlDateFormatter temporário que será criado irá receber o fuso horário do objeto passado. O banco de dados de fuso horário incluído com o PHP não será utilizado - o banco da ICU será usado no lugar. O identificador de fuso horário usado em objetos DateTime precisa, portanto, existir também no banco de dados da ICU.

Parâmetros

datetime

Um objeto da classe IntlCalendar ou DateTime. A informação de fuso horário no objeto será utilizada.

format

Este parâmetro indica como formatar a data/horário. Pode ser um array com dois elementos (primeiro o estilo de data, depois o de horário, com uma das constantes IntlDateFormatter::NONE, IntlDateFormatter::SHORT, IntlDateFormatter::MEDIUM, IntlDateFormatter::LONG, IntlDateFormatter::FULL), um int com o valor de uma dessas constantes (que no caso será usado tanto para o horário como para a data) ou uma string com o formato descrito na » documentação ICU. Caso seja null, o estilo padrão será usado.

locale

A localidade a ser utilizada, ou null para usar a localidade padrão.

Valor Retornado

Uma string com o resultado ou false em caso de falha.

Exemplos

Exemplo #1 Exemplos de IntlDateFormatter::formatObject()

<?php
/* fuso horário padrão é irrelevante; o fuso horário vem do objeto */
ini_set('date.timezone', 'UTC');
/* localidade padrão é lida desta configuração ini */
ini_set('intl.default_locale', 'fr_FR');

$cal = IntlCalendar::fromDateTime("2013-06-06 17:05:06 Europe/Dublin");
echo
"padrão:\n\t",
IntlDateFormatter::formatObject($cal),
"\n";

echo
"\$format longo (FULL):\n\t",
IntlDateFormatter::formatObject($cal, IntlDateFormatter::FULL),
"\n";

echo
"\$format array (NONE, FULL):\n\t",
IntlDateFormatter::formatObject($cal, array(
IntlDateFormatter::NONE,
IntlDateFormatter::FULL)),
"\n";

echo
"\$format string (d 'of' MMMM y):\n\t",
IntlDateFormatter::formatObject($cal, "d 'of' MMMM y", 'en_US'),
"\n";

echo
"com DateTime:\n\t",
IntlDateFormatter::formatObject(
new
DateTime("2013-09-09 09:09:09 Europe/Madrid"),
IntlDateFormatter::FULL,
'es_ES'),
"\n";

O exemplo acima produzirá:

default:
    6 juin 2013 17:05:06
$format longo (FULL):
    jeudi 6 juin 2013 17:05:06 heure d’été irlandaise
$format array (NONE, FULL):
    17:05:06 heure d’été irlandaise
$format string (d 'of' MMMM y):
    6 of June 2013
com DateTime:
    lunes, 9 de septiembre de 2013 09:09:09 Hora de verano de Europa central

adicione uma nota

Notas Enviadas por Usuários (em inglês) 4 notes

up
1
Anonymous
1 year ago
`format` vs static `formatObject`

** The `formatObject` is NOT slower! (on PHP 5.5) **

Use either the `format` method or the static `formatObject`.

Since `formatObject` is doing the work of `new IntlDateFormatter` with the provided pattern, the instantiation line must be included in the loop!

Another debunked flawed false test!

php -v
PHP 5.5.26-1+deb.sury.org~precise+1 (cli) (built: Jun 15 2015 10:04:01)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick Rethans

<?php
date_default_timezone_set
('America/Los_Angeles');
$n = 3000;

$dt = new DateTime('2015-01-03 12:32:44');

$time[] = microtime(true);
for(
$i=0;$i<$n;$i++) {
$a = IntlDateFormatter::formatObject($dt, 'MMMM dd', 'hu_HU');
}
echo
"$a\n";
$time[] = microtime(true);
for(
$i=0;$i<$n;$i++) {
$df = new IntlDateFormatter('hu_HU', IntlDateFormatter::SHORT, IntlDateFormatter::NONE, null, null, 'MMMM dd');
$a = $df->format($dt);
}
echo
"$a\n";
$time[] = microtime(true);

for(
$j=1;$j<count($time);$j++) {
printf("%fs\n", $time[$j]-$time[$j-1]);
}
?>

`formatObject` : 0.336579s
`format` : 0.391158s
up
2
raf at sns dot pm
2 years ago
If you want to format a date according to a specific scheme and in a local language, here is the link to the reference of the formatting codes to use, I did not find it directly in the documentation:
https://unicode-org.github.io/icu/userguide/format_parse/datetime/#date-field-symbol-table
Here is a test using a DateTime object :

<?php

// must be required by the server
date_default_timezone_set( 'Europe/Paris' );

// instantiate a new DateTime object
$dateTimeObj = new DateTime('now', new DateTimeZone('Europe/Paris'));

// format the date with a specific scheme
// the 3 parameters are [ DateTimeObject, ICU Scheme, locale code string ]
$dateFromatted = IntlDateFormatter::formatObject( $dateTimeObj, "eee d MMMM y à HH:mm", 'fr' );

// test :
echo ucwords($dateFromatted);
// output : Jeu. 7 Avril 2022 à 04:36 // formatted as i want

?>
up
-3
ferenczi dot krisztian at gmail dot com
9 years ago
`format` vs static `formatObject`

The `formatObject` is slower! `format` is more then 10-13 times faster! (on PHP 5.5) Use the `format` method instead of the static `formatObject`.

php -v
PHP 5.5.26-1+deb.sury.org~precise+1 (cli) (built: Jun 15 2015 10:04:01)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick Rethans

<?php
$n
= 3000;

$dt = new \DateTime('2015-01-03 12:32:44');
$df = new IntlDateFormatter('hu_HU', IntlDateFormatter::SHORT, IntlDateFormatter::NONE);
$df->setPattern('MMMM dd');

$time[] = microtime(true);
for(
$i=0;$i<$n;$i++) {
$a = IntlDateFormatter::formatObject($dt, 'MMMM dd', 'hu_HU');
}
echo
"$a\n";
$time[] = microtime(true);
for(
$i=0;$i<$n;$i++) {
$a = $df->format($dt);
}
echo
"$a\n";
$time[] = microtime(true);

for(
$j=1;$j<count($time);$j++) {
printf("%fs\n", $time[$j]-$time[$j-1]);
}
?>

`formatObject` : 0.458248 s
`format` : 0.033759 s
up
-3
sebastian at huehnerhose dot de
7 years ago
It's still slower on php7.1, but not that dramatic anymore, here I got something around 5times slower
To Top