Movatterモバイル変換


[0]ホーム

URL:


    IntlDateFormatter::getCalendar »
    « IntlDateFormatter::format

    IntlDateFormatter::formatObject

    datefmt_format_object

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

    IntlDateFormatter::formatObject --datefmt_format_objectFormats an object

    Description

    Object-oriented style

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

    Procedural style

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

    This function allows formatting anIntlCalendar orDateTime object without first explicitly creating aIntlDateFormatter object.

    The temporaryIntlDateFormatter 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 inDateTime objects must therefore also exist in ICU's database.

    Parameters

    datetime

    An object of typeIntlCalendar orDateTime. The timezone information in the object will be used.

    format

    How to format the date/time. This can either be anarray with two elements (first the date style, then the time style, these being one of the constantsIntlDateFormatter::NONE,IntlDateFormatter::SHORT,IntlDateFormatter::MEDIUM,IntlDateFormatter::LONG,IntlDateFormatter::FULL), anint with the value of one of these constants (in which case it will be used both for the time and the date) or astring with the format described in» the ICU documentation. Ifnull, the default style will be used.

    locale

    The locale to use, ornull to use thedefault one.

    Return Values

    A string with result orfalse on failure.

    Examples

    Example #1IntlDateFormatter::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";

    The above example will output:

    default:    6 juin 2013 17:05:06long $format (full):    jeudi 6 juin 2013 17:05:06 heure d’été irlandaisearray $format (none, full):    17:05:06 heure d’été irlandaisestring $format (d 'of' MMMM y):    6 of June 2013with DateTime:    lunes, 9 de septiembre de 2013 09:09:09 Hora de verano de Europa central

    Found A Problem?

    Learn How To Improve This PageSubmit a Pull RequestReport a Bug
    add a note

    User Contributed Notes4 notes

    Anonymous
    2 years 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= newDateTime('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= newIntlDateFormatter('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
    raf at sns dot pm
    3 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= newDateTime('now', newDateTimeZone('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 :
    echoucwords($dateFromatted);
    // output : Jeu. 7 Avril 2022 à 04:36 // formatted as i want

    ?>
    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= newIntlDateFormatter('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
    sebastian at huehnerhose dot de
    8 years ago
    It's still slower on php7.1, but not that dramatic anymore, here I got something around 5times slower
    add a note
    To Top
    and to navigate •Enter to select •Esc to close
    PressEnter without selection to search using Google

    [8]ページ先頭

    ©2009-2025 Movatter.jp