IntlDateFormatter::formatObject

datefmt_format_object

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

IntlDateFormatter::formatObject -- datefmt_format_objectFormate un objet

Description

Style orienté objet

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

Style procédural

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

Cette fonction permet le formatage d'un objet IntlCalendar ou d'un objet DateTime sans avoir créé auparavant un objet IntlDateFormatter.

L'objet IntlDateFormatter temporaire créé prendra le décalage horaire depuis l'objet passé. La base de données des décalages horaires interne à PHP ne sera pas utilisée - ICU sera utilisé à la place. L'identifiant de décalage horaire utilisé dans les objets DateTime doit toutefois exister également dans la base de données ICU.

Liste de paramètres

datetime

Un objet de type IntlCalendar ou de type DateTime. L'information de décalage horaire dans l'objet sera utilisée.

format

Format de la date/heure. Peut-être soit un tableau avec deux éléments (d'abord le style de la date, puis, le style de l'heure, en utilisant une des constantes suivantes : IntlDateFormatter::NONE, IntlDateFormatter::SHORT, IntlDateFormatter::MEDIUM, IntlDateFormatter::LONG, IntlDateFormatter::FULL), soit un type int avec la valeur de l'une de ces constantes (auquel cas, il sera utilisé à la fois pour la date et l'heure), ou un type string avec le format décrit dans la » documentation ICU. Si null est fourni, le style par défaut sera utilisé.

locale

La locale à utiliser, ou null pour utiliser la locale par défaut.

Valeurs de retour

Une chaîne de caractères contenant le résultat ou false si une erreur survient.

Exemples

Exemple #1 Exemple avec IntlDateFormatter::formatObject()

<?php
/* Le décalage horaire par défaut n'est pas significatif ;
   il est pris depuis l'objet */
ini_set('date.timezone''UTC');

/* La locale par défaut est prise depuis la configuration ini */
ini_set('intl.default_locale''fr_FR');

$cal IntlCalendar::fromDateTime("2013-06-06 17:05:06 Europe/Dublin");
echo 
"défault :\n\t",
        
IntlDateFormatter::formatObject($cal),
        
"\n";

echo 
"long \$format (complet) :\n\t",
        
IntlDateFormatter::formatObject($calIntlDateFormatter::FULL),
        
"\n";

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

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

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

L'exemple ci-dessus va afficher :

défault :
    6 juin 2013 17:05:06
long $format (complet):
    jeudi 6 juin 2013 17:05:06 heure d’été irlandaise
array $format (aucun, complet):
    17:05:06 heure d’été irlandaise
string $format (d 'de' MMMM y):
    6 de June 2013
avec DateTime :
    lunes, 9 de septiembre de 2013 09:09:09 Hora de verano de Europa central

add a note add a note

User Contributed Notes 2 notes

up
0
ferenczi dot krisztian at gmail dot com
8 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
-1
sebastian at huehnerhose dot de
6 years ago
It's still slower on php7.1, but not that dramatic anymore, here I got something around 5times slower
To Top