• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • IntlDateFormatter::formatObject()

    datefmt_format_object

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

    Formats an object

    说明

    面向对象风格
    publicstaticIntlDateFormatter::formatObject(object $object[,mixed $format= NULL[,string $locale= NULL]]): string
    过程化风格
    publicstaticdatefmt_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. If NULL, 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