`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.391158sIntlDateFormatter::formatObject
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
IntlDateFormatter::formatObject
Референца за `intldateformatter.formatobject.php` со подобрена типографија и навигација.
IntlDateFormatter::formatObject
datefmt_format_object
(PHP 5 >= 5.5.0, PHP 7, PHP 8, PECL intl >= 3.0.0)
IntlDateFormatter::formatObject -- datefmt_format_object — Форматира објект
= NULL
Напиши целосна ознака на елемент
$datetime, array|int|string|null $format = null, ?string $locale = null): string|falseПроцедурален стил
$datetime, array|int|string|null $format = null, ?string $locale = null): string|falseОваа функција овозможува форматирање на IntlCalendar or DateTime објект без прво експлицитно да се креира IntlDateFormatter object.
Привремениот IntlDateFormatter што ќе се креира ќе ја земе временската зона од проследениот објект. Базата на податоци за временски зони што доаѓа со PHP нема да се користи – наместо тоа ќе се користи онаа на ICU. Идентификаторот на временската зона што се користи во DateTime објектите затоа мора да постојат и во базата на податоци на ICU.
Параметри
datetime-
Објект од тип IntlCalendar or DateTime. Ќе се користат информациите за временската зона во објектот.
format-
Како да се форматира датумот/времето. Ова може да биде или array со два елементи (прво стилот на датумот, потоа стилот на времето, кои се една од константите
IntlDateFormatter::NONE,IntlDateFormatter::SHORT,IntlDateFormatter::MEDIUM,IntlDateFormatter::LONG,IntlDateFormatter::FULL), еден int со вредноста на една од овие константи (во кој случај ќе се користи и за времето и за датумот) или string со форматот опишан во » документацијата на ICU. Акоnull, ќе се користи стандардниот стил. locale-
Локалот што треба да се користи, или
nullза да се користи стандардниот.
Вратени вредности
Низа со резултат или false при неуспех.
Примери
Пример #1 IntlDateFormatter::formatObject() examples
<?php
/* default timezone is irrelevant; timezone taken from the object */
ini_set('date.timezone', 'UTC');
/* default locale is taken from this ini setting */
ini_set('intl.default_locale', 'fr_FR');
$cal = IntlCalendar::fromDateTime("2013-06-06 17:05:06 Europe/Dublin");
echo "default:\n\t",
IntlDateFormatter::formatObject($cal),
"\n";
echo "long \$format (full):\n\t",
IntlDateFormatter::formatObject($cal, IntlDateFormatter::FULL),
"\n";
echo "array \$format (none, full):\n\t",
IntlDateFormatter::formatObject($cal, array(
IntlDateFormatter::NONE,
IntlDateFormatter::FULL)),
"\n";
echo "string \$format (d 'of' MMMM y):\n\t",
IntlDateFormatter::formatObject($cal, "d 'of' MMMM y", 'en_US'),
"\n";
echo "with DateTime:\n\t",
IntlDateFormatter::formatObject(
new DateTime("2013-09-09 09:09:09 Europe/Madrid"),
IntlDateFormatter::FULL,
'es_ES'),
"\n";Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
default:
6 juin 2013 17:05:06
long $format (full):
jeudi 6 juin 2013 17:05:06 heure d’été irlandaise
array $format (none, full):
17:05:06 heure d’été irlandaise
string $format (d 'of' MMMM y):
6 of June 2013
with DateTime:
lunes, 9 de septiembre de 2013 09:09:09 Hora de verano de Europa central
Белешки од корисници 4 белешки
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
?>`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 sIt's still slower on php7.1, but not that dramatic anymore, here I got something around 5times slower