IntlDateFormatter::formatObject()
datefmt_format_object
(PHP 5 >= 5.5.0, PHP 7, PECL intl >= 3.0.0)
Formats an object
说明
面向对象风格public static IntlDateFormatter::formatObject(object $object[,mixed $format= NULL[,string $locale= NULL]]): string
过程化风格public static datefmt_format_object(object $object[,mixed $format= NULL[,string $locale= NULL]]): string
This function allows formatting an IntlCalendar or DateTime object without first explicitly creating a IntlDateFormatter object.
The temporary IntlDateFormatter that will be created will take the timezone from the passed in object. The timezone database bundled with PHP will not be used – ICU's will be used instead. The timezone identifier used in DateTime objects must therefore also exist in ICU's database.
参数
- $object
An object of type IntlCalendar or DateTime. The timezone information in the object will be used.
- $format
How to format the date/time. This can either be an array with two elements(first the date style, then the time style, these being one of the constants
IntlDateFormatter::NONE
,IntlDateFormatter::SHORT
,IntlDateFormatter::MEDIUM
,IntlDateFormatter::LONG
,IntlDateFormatter::FULL
), an integer with the value of one of these constants(in which case it will be used both for the time and the date)or a string with the format described in » the ICU documentation. IfNULL
, the default style will be used.- $locale
The locale to use, or
NULL
to use the default one.
返回值
A string with result 或者在失败时返回FALSE
.
范例
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";
以上例程会输出:
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
`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
It's still slower on php7.1, but not that dramatic anymore, here I got something around 5times slower